Submission #1233612

#TimeUsernameProblemLanguageResultExecution timeMemory
1233612simplemind_31Quality Of Living (IOI10_quality)C++20
100 / 100
1714 ms70904 KiB
#include "quality.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> intset;
int ca,help[3001][3001],l=1,r=9000000,mid;
bool xd;
int rectangle(int R, int C, int H, int W, int Q[3001][3001]){
	while(l<r){
		xd=false;
		for(int i=0;i<R;i++){
			for(int j=0;j<C;j++){
				help[i][j]=0;
			}
		}
		mid=(l+r)>>1;
		for(int i=0;i<R;i++){
			for(int j=0;j<C;j++){
				if(Q[i][j]<=mid){
					ca=1;
				}else{
					ca=-1;
				}
				help[max(i-H/2,0)][max(j-W/2,0)]+=ca;
				help[max(i-H/2,0)][min(j+W/2+1,3000)]-=ca;
				help[min(i+H/2+1,3000)][max(j-W/2,0)]-=ca;
				help[min(i+H/2+1,3000)][min(j+W/2+1,3000)]+=ca;
			}
		}
		for(int i=1;i<R;i++){
			help[i][0]+=help[i-1][0];
		}
		for(int i=1;i<C;i++){
			help[0][i]+=help[0][i-1];
		}
		for(int i=1;i<R;i++){
			for(int j=1;j<C;j++){
				help[i][j]+=help[i-1][j]+help[i][j-1]-help[i-1][j-1];
			}
		}
		for(int i=H/2;i<R-H/2 && !xd;i++){
			for(int j=W/2;j<C-W/2 && !xd;j++){
				if(help[i][j]>0){
					xd=true;
				}
			}
		}
		if(xd){
			r=mid;
		}else{
			l=mid+1;
		}
	}
	return l;
}
#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...