제출 #1267091

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

const int MAXN = 3001;

int rectangle(int n,int m,int H,int W, int Q[MAXN][MAXN]){
	vector<vector<int>> pre(n+1,vector<int>(m+1,0));
	vector<vector<int>> grid(n+1,vector<int>(m+1,0));
	
	for (int i=0;i<n;i++){
		for (int j=0;j<m;j++){
			grid[i+1][j+1] = Q[i][j];
		}
	}

	int l=1, r = n * m;
	int res = r;

	function<bool(int)>  check = [&] (int mid) -> bool {
		for (int i=1;i<=n;i++){
			for (int j=1;j<=m;j++){
				pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1] + (grid[i][j] <= mid ? 1 : -1);
			}
		}
		for (int i=H;i<=n;i++){
			for (int j=W;j<=m;j++){
				int val = pre[i][j] - pre[i-H][j] - pre[i][j-W] + pre[i-H][j-W];
				if (val>0) return true;
			}
		}
		return false;
	};

	while (l<=r){
		int mid = (l+r)>>1;
		if (check(mid)){
			res = mid;
			r=mid-1;
		} else{
			l = mid + 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...