Submission #996004

#TimeUsernameProblemLanguageResultExecution timeMemory
996004Essa2006삶의 질 (IOI10_quality)C++14
100 / 100
1286 ms70756 KiB
#include "quality.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
#define FF first
#define SS second
#define all(a) a.begin(), a.end()
#define mod (ll)(1000000007)

int rectangle(int rr, int cc, int h, int w, int A[3001][3001]){
    int l = 1, r = rr * cc, res = rr * cc;

    while (l <= r) {
        int md = (l + r) / 2;
        int mx = 0;

        int CC[3001][3001];
        for (int i = 0; i < rr; i++) {
            for (int j = 0; j < cc; j++) {
                CC[i][j] = (A[i][j] <= md);
                if (i) {
                    CC[i][j] += CC[i - 1][j];
                }
                if (j) {
                    CC[i][j] += CC[i][j - 1];
                }

                if (i && j) {
                    CC[i][j] -= CC[i - 1][j - 1];
                }
                if (rr >= h - 1 && cc >= w - 1) {
                    int sum = CC[i][j];
                    if (i - h >= 0) {
                        sum -= CC[i - h][j];
                    }
                    if (j - w >= 0) {
                        sum -= CC[i][j - w];
                    }
                    if (i - h >= 0 && j - w >= 0) {
                        sum += CC[i - h][j - w];
                    }
                    mx = max(mx, sum);
                }
            }
        }

        if (mx > h * w / 2) {
            res = md, r = md - 1;
        }
        else {
            l = md + 1;
        }
    }
    return res;
}
#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...