# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
943459 | 2024-03-11T13:43:39 Z | IBory | Quality Of Living (IOI10_quality) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; const int MAX = 3003; int S[MAX][MAX], Y[MAX * MAX], X[MAX * MAX]; int main() { ios::sync_with_stdio(0); cin.tie(0); int N, M, H, W; cin >> N >> M >> H >> W; for (int i = 1; i <= N; ++i) for (int j = 1; j <= M; ++j) { int n; cin >> n; Y[n] = i, X[n] = j; } int L = 1, R = N * M; while (L + 1 < R) { int mid = (L + R) >> 1; memset(S, 0, sizeof(S)); for (int i = 1; i <= mid; ++i) S[Y[i]][X[i]] = 1; for (int i = 1; i <= N; ++i) for (int j = 1; j <= M; ++j) S[i][j] += S[i][j - 1]; for (int j = 1; j <= M; ++j) for (int i = 1; i <= N; ++i) S[i][j] += S[i - 1][j]; int high = 0; for (int i = H; i <= N; ++i) for (int j = W; j <= M; ++j) { int s = S[i][j] - S[i - H][j] - S[i][j - W] + S[i - H][j - W]; high = max(high, s); } ((H * W + 1) / 2 <= high ? R : L) = mid; } cout << R; return 0; }