Submission #1263971

#TimeUsernameProblemLanguageResultExecution timeMemory
1263971liangjeremyQuality Of Living (IOI10_quality)C++20
100 / 100
2635 ms247448 KiB
#include "quality.h"
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using db=double;
using sll=__int128;
using lb=long double;

int rectangle(int R, int C, int H, int W, int Q[3001][3001]){
#define int long long
	int r=R; int c=C; int h=H; int w=W; 
	vector<vector<int>>a(r+1,vector<int>(c+1));
	for(int i=1; i<=r; i++){
		for(int j=1; j<=c; j++){
			a[i][j]=Q[i-1][j-1]; 
		}
	}
	int left=1; int right=r*c;
	while(left<right){
		int mid=(left+right)>>1; vector<vector<int>>v(r+1,vector<int>(c+1)); vector<vector<int>>prefix(r+1,vector<int>(c+1)); 
		for(int i=1; i<=r; i++){
			for(int j=1; j<=c; j++){
				v[i][j]=(a[i][j]<=mid); prefix[i][j]=v[i][j]+prefix[i][j-1]+prefix[i-1][j]-prefix[i-1][j-1]; 
			}
		}
		int mx=0;
		for(int i=1; i+h-1<=r; i++){
			for(int j=1; j+w-1<=c; j++){
				int x1=i; int y1=j; int x2=i+h-1; int y2=j+w-1; 
				mx=max(mx,prefix[x2][y2]-prefix[x2][y1-1]-prefix[x1-1][y2]+prefix[x1-1][y1-1]);
			}
		}
		if(mx>=(h*w)/2+1)right=mid; else left=mid+1; 
	}
#undef int
	return (int)left; 
}
#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...