제출 #1347643

#제출 시각아이디문제언어결과실행 시간메모리
1347643toast12삶의 질 (IOI10_quality)C++20
100 / 100
1543 ms141760 KiB
#include "quality.h"
#include <bits/stdc++.h>
using namespace std;

int rectangle(int R, int C, int H, int W, int Q[3001][3001]) {
	vector<vector<int>> grid(R+2, vector<int>(C+2));
    for (int i = 0; i < R; i++) {
        for (int j = 0; j < C; j++) grid[i+1][j+1] = Q[i][j];
    }
    int lo = 1, hi = R*C;
    vector<vector<int>> v(R+2, vector<int>(C+2));
    while (lo < hi) {
        int mid = (lo+hi)/2;
        for (int i = 1; i <= R; i++) {
            for (int j = 1; j <= C; j++) {
                if (grid[i][j] < mid) v[i][j] = -1;
                else if (grid[i][j] == mid) v[i][j] = 0;
                else v[i][j] = 1;
            }
        }
        vector<vector<int>> ps(R+2, vector<int>(C+2));
        for (int i = 1; i <= R; i++) {
            for (int j = 1; j <= C; j++) ps[i][j] = v[i][j]+ps[i][j-1];
            for (int j = 1; j <= C; j++) ps[i][j] += ps[i-1][j];
        }
        bool poss = false;
        for (int i = H; i <= R; i++) {
            for (int j = W; j <= C; j++) {
                int sum = ps[i][j]-ps[i-H][j]-ps[i][j-W]+ps[i-H][j-W];
                if (sum <= 0) {
                    poss = true;
                    break;
                }
            }
        }
        if (poss) hi = mid;
        else lo = mid+1;
    }
    return hi;
}
#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...