zoukankan      html  css  js  c++  java
  • Fake Maxpooling

    Fake Maxpooling

    在初始化数组的时候如果直接求可能会t,所以用这种筛法,把复杂度降为(O(nm)),最后用单调队列来维护区间最大值。

    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            if(!a[i][j])
                for(int k=1;k*i<=n&&k*j<=m;++k)
                    a[i*k][j*k]=i*j*k;
    
    // Created by CAD on 2020/7/13.
    #include <bits/stdc++.h>
    
    #define fi first
    #define se second
    #define pii pair<int,int>
    #define ll long long
    using namespace std;
    const int maxn=5005;
    int a[maxn][maxn];
    void init(int n,int m){
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                if(!a[i][j])
                    for(int k=1;k*i<=n&&k*j<=m;++k)
                        a[i*k][j*k]=i*j*k;
    }
    int ma[maxn][maxn];
    
    int main(){
        int n,m,k;cin>>n>>m>>k;
        init(n,m);
    
        for(int j=1;j<=m;++j){
            deque<pii> q;
            for(int i=1;i<=n;++i){
                while(!q.empty()&&(q.front().fi<a[i][j]||i-q.front().se+1>k)) q.pop_front();
                while(!q.empty()&&q.back().fi<a[i][j]) q.pop_back();
                q.push_back({a[i][j],i});
                ma[i][j]=q.front().fi;
            }
        }
        ll ans=0;
        for(int i=k;i<=n;++i){
            deque<pii> q;
            for(int j=1;j<=m;++j){
                while(!q.empty()&&(q.front().fi<ma[i][j]||j-q.front().se+1>k)) q.pop_front();
                while(!q.empty()&&q.back().fi<ma[i][j]) q.pop_back();
                q.push_back({ma[i][j],j});
                if(j>=k)
                ans+=q.front().fi;
            }
        }
        cout<<ans<<endl;
    }
    
    CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042
  • 相关阅读:
    SSL配置
    PHPStorm 打开时闪退的问题
    【网址链接】
    js中将string转换为number
    HTML特效代码大全
    前端面试题-重要
    元素框默认的计算方式
    html中有趣的显示出柠檬的方法
    html中圆角方法border-top-left-radius
    html+css显示出三角形方法transparent
  • 原文地址:https://www.cnblogs.com/CADCADCAD/p/13297279.html
Copyright © 2011-2022 走看看