# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
288630 | 2020-09-01T17:17:13 Z | MasterTaster | Quality Of Living (IOI10_quality) | C++14 | 0 ms | 0 KB |
#include<bits/stdc++.h> #include <stdio.h> #include <stdlib.h> #include "quality.h" using namespace std; #define ll long long #define pb push_back #define pii pair<int, int> #define xx first #define yy second #define endl "\n" #define MAXN 9000000 static int R,C,H,W,Q[3001][3001],ans; int pref[3010][3010], q[3010][3010]; //int bit[310]; int pola; bool check(int med) { ///cout<<endl; for (int i=0; i<R; i++) { for (int j=0; j<C; j++) { pref[i][j]=0; if (q[i][j]<=med) pref[i][j]++; if (i>0) pref[i][j]+=pref[i-1][j]; if (j>0) pref[i][j]+=pref[i][j-1]; if (i>0 && j>0) pref[i][j]-=pref[i-1][j-1]; ///cout<<pref[i][j]<<" "; } ///cout<<endl; } for (int i=H-1; i<R; i++) { for (int j=W-1; j<C; j++) { int koliko=pref[i][j]; if (i>=H) koliko-=pref[i-H][j]; if (j>=W) koliko-=pref[i][j-W]; if (i>=H && j>=W) koliko+=pref[i-H][j-W]; if (koliko>=pola) { return true; } } } return false; } int rectangle(int R, int C, int H, int W, int Q[3001][3001]) { pola=H*W/2+1; for (int i=0; i<R; i++) for (int j=0; j<C; j++) q[i][j]=Q[i][j]; int l=1, r=R*C; int ress=R*C; while (l<=r) { int mid=l+(r-l)/2; ///cout<<mid<<":"<<endl<<endl<<endl; if (check(mid)) { ress=mid; r=mid-1; } else l=mid+1; } return ress; } int main(){ scanf("%d%d%d%d",&R,&C,&H,&W); for (int i=0;i<R;i++) for (int j=0;j<C;j++) scanf("%d",&Q[i][j]); ans = rectangle(R,C,H,W,Q); printf("%d\n",ans); return 0; }