# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
934839 | 2024-02-28T05:18:33 Z | vjudge1 | 삶의 질 (IOI10_quality) | C++17 | 0 ms | 0 KB |
#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; }