# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
934839 | vjudge1 | Quality Of Living (IOI10_quality) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define faster ios_base::sync_with_stdio(false);cin.tie(NULL);
#define fi first
#define se second
#define pb push_back
#define task "hetcuu"
using namespace std;
using ll = long long;
using ld = long double;
const int maxN = 3e3 + 1;
int m,n,h,w;
int q[maxN][maxN];
int pre[maxN][maxN];
int main(){
faster
//freopen(task".inp","r",stdin);
//freopen(task".out","w",stdout);
//input(r,c,h,w);
cin >> n >> m >> h >> w;
for(int i = 1; i <= n;++i){
for(int j = 1;j <= m;++j){
cin >> q[i][j];
}
}
int l=(h*w+1)/2, r=n*m, ans=0, pref[3001][3001];
while(l <= r) {
int M = (l + r) / 2;
bool ok = 0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
pref[i][j] = (q[i][j] <= M) + pref[i-1][j] + pref[i][j-1] - pref[i-1][j-1];
for(int i=1; i+h-1<=n; i++)
for(int j=1; j+w-1<=m; j++)
if(2 * (pref[i+h-1][j+w-1] - pref[i-1][j+w-1] - pref[i+h-1][j-1] + pref[i-1][j-1]) >= h * w) ok = 1;
if(ok) ans = M, r = M - 1;
else l = M + 1;
}
cout << ans;
}