Submission #1175718

#TimeUsernameProblemLanguageResultExecution timeMemory
1175718nagornzQuality Of Living (IOI10_quality)C++20
100 / 100
1456 ms106440 KiB
#include "quality.h"
#include <bits/stdc++.h>

using namespace std;

int rectangle(int n, int m, int row, int col, int arr[3001][3001]) {
    vector <vector <int>> a(n + 1, vector <int> (m + 1));
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) a[i + 1][j + 1] = arr[i][j];
    int l = 1, r = n * m;
    int ans = r;
    int cnt = row * col / 2 + 1;
    while (l <= r) {
        int mid = (l + r) / 2;
        vector <vector <int>> aa(n + 1, vector <int> (m + 1));
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                aa[i][j] = (a[i][j] <= mid);
                aa[i][j] = aa[i][j] + aa[i - 1][j] + aa[i][j - 1] - aa[i - 1][j - 1];
            }
        }
        bool can = false;
        for (int i = row; i <= n; i++) {
            for (int j = col; j <= m; j++) {
                int sum = aa[i][j] - aa[i - row][j] - aa[i][j - col] + aa[i - row][j - col];
                if (sum >= cnt) {
                    can = true;
                    break;
                }
            }
            if (can) break;
        }
        if (can) {
            r = mid - 1;
            ans = min(ans, mid);
        }
        else l = mid + 1;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...