# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1249090 | basa | Quality Of Living (IOI10_quality) | C++20 | 0 ms | 0 KiB |
#include "bits/stdc++.h"
#include "quality.h"
using namespace std;
int pref[3005][3005];
bool check(int m, int r, int c, int h, int w, int q[3005][3005]){
memset(pref, 0, sizeof pref);
for(int i = 1; i <= r; i++){
for(int j = 1; j <= c; j++){
pref[i][j] = pref[i - 1][j] + pref[i][j - 1] - pref[i - 1][j - 1];
if(q[i - 1][j - 1] > m) pref[i][j]++;
}
}
bool valid = 0;
for(int i = 1; i <= r - h + 1; i++){
for(int j = 1; j <= c - w + 1; j++){
int br = i + h - 1, bc = j + w - 1;
if((pref[br][bc] - pref[i - 1][bc] - pref[br][j - 1] + pref[i - 1][j - 1]) <= (h * w) / 2) valid = 1;
}
}
if(valid) return 1;
return 0;
}
int rectangle(int n, int m, int h, int w, int q[3005][3005]){
int l = 1, r = n * m;
while(l <= r){
int mid = (l + r) / 2;
if(check(mid, n, m, h, w, q)) r = mid - 1;
else l = mid + 1;
}
return r + 1;
}
// signed main()
// {
// cin.tie(0) -> sync_with_stdio(0);
// int idk[5][5] = {{5,11,12,16,25}, {17,18,2,7,10}, {4,23,20,3,1}, {24,21,19,14,9}, {6,22,8,13,15}};
// cout << rectangle(5, 5, 3, 3, idk);
// }