제출 #1347992

#제출 시각아이디문제언어결과실행 시간메모리
1347992bbbiros삶의 질 (IOI10_quality)C++20
100 / 100
1266 ms106684 KiB
#include "quality.h"
#include<iostream>
const int MAXN = 3024;
int q[MAXN][MAXN];
int pref[MAXN][MAXN];
int n, m, h, w;
using namespace std;

bool check(int x)
{
	//cout<<x<<'#'<<endl;
	for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)pref[i][j]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			pref[i][j]=pref[i-1][j]+pref[i][j-1]-pref[i-1][j-1];
			if(q[i][j]<=x)
			{
				pref[i][j]++;
			}
			//cout<<pref[i][j]<<' ';
		}
		//cout<<endl;
	}
	for(int i=h;i<=n;i++)
	{
		for(int j=w;j<=m;j++)
		{
			int cnt=pref[i][j]-pref[i-h][j]-pref[i][j-w]+pref[i-h][j-w];
			if(cnt>=((h*w)/2+1))return true;
		}
	}
	return false;
}
int rectangle(int R, int C, int H, int W, int Q[3001][3001])
{
	n=R;
	m=C;
	h=H;
	w=W;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			q[i][j]=Q[i-1][j-1];
			//cout<<q[i][j]<<' ';
		}
		//cout<<endl;
	}
	int l=1;
	int r=n*m;
	int ans=0;
	while(l<=r)
	{
		int mid=(l+r)/2;
		if(check(mid))
		{
			ans=mid;
			r=mid-1;
		}
		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...