Advertisement
sandro1234

very cool

May 16th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll int
  4. #define pb push_back
  5. #define fr first
  6. #define sc second
  7. #define ARRS int(2e5+11)
  8. #define MTXS int(1e3+11)
  9. #define INF int(2e12+11)
  10.  
  11. ll i,j,k,p,l,m,n,r,f,A,B,C,D;
  12. ll a[MTXS][MTXS],sm[MTXS][MTXS],lg[MTXS][MTXS],s[MTXS][MTXS],mm[MTXS][MTXS];
  13.  
  14. deque<pair<ll,ll> > dk;
  15.  
  16. int main(){
  17.     #ifdef KHOKHO
  18.         freopen("in.in","r",stdin);
  19.         freopen("out.out","w+",stdout);
  20.     #endif
  21.     cin>>m>>n>>D>>C>>B>>A;
  22.     for(int i=1; i<=n; i++){
  23.         for(int j=1; j<=m; j++){
  24.             cin>>a[i][j];
  25.         }
  26.     }
  27.     for(int i=1; i<=n; i++){
  28.         for(int j=1; j<=m; j++){
  29.             s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
  30.  
  31.         }
  32.  
  33.     }
  34.     for(int i=1; i<=n-A; i++){
  35.         for(int j=1; j<=m-B; j++){
  36.             sm[i][j]=s[i+A][j+B]-s[i+A][j]-s[i][j+B]+s[i][j];
  37.             cout<<sm[i][j]<<" ";
  38.         }
  39.         cout<<endl;
  40.     }
  41.     for(int i=1; i<=n-C; i++){
  42.         for(int j=1; j<=m-D; j++){
  43.             lg[i][j]=s[i+C][j+D]-s[i+C][j]-s[i][j+D]+s[i][j];
  44.         }
  45.     }
  46.     ll pas;
  47.     for(int i=1; i<=n-C; i++){
  48.         for(int j=1; j<=m-D; j++){
  49.             ll k = sm[i+1][j+1];
  50.             while(!dk.empty()&&k<=dk.back().second){
  51.                 dk.pop_back();
  52.             }
  53.             dk.push_back({j,k});
  54.             while(!dk.empty()&&dk.front().first<=j+1)
  55.                 dk.pop_back();
  56.             mm[i][j]=dk.front().second;
  57.         }
  58.     }
  59.     dk.clear();
  60.     for(int i=1; i<=m-D; i++){
  61.         for(int j=1; j<=n-C; j++){
  62.             ll k = mm[j+1][i+1];
  63.             while(!dk.empty()&&k<=dk.back().second){
  64.                 dk.pop_back();
  65.             }
  66.             dk.push_back({j,k});
  67.             while(!dk.empty()&&dk.front().first<=j+1)
  68.                 dk.pop_back();
  69.             cout<<lg[j][i]<<endl;
  70.             pas=min(pas,lg[j][i]-dk.front().second);
  71.         }
  72.     }
  73.     cout<<pas;
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement