Submission #976441

#TimeUsernameProblemLanguageResultExecution timeMemory
976441LaviniaTornaghiQuality Of Living (IOI10_quality)C++14
60 / 100
5034 ms35156 KiB
#include <bits/stdc++.h>
using namespace std;
#include "grader.h"

void print(multiset<int> x){
	for(auto i:x) cout<<i<<" ";
	cout<<endl;
}

int A,B;

void addcolumn(vector<vector<int>> &q, multiset <int> &s, int c, int sq, int eq){
	assert(eq<=A);
	for(int i=sq;i<eq;i++) s.insert(q[i][c]);
}
void removecolumn(vector<vector<int>> &q,multiset <int> &s, int c, int sq, int eq){
	assert(eq<=A);
	for(int i=sq;i<eq;i++){
		s.erase(s.lower_bound(q[i][c]));
	}
}
void addrow(vector<vector<int>> &q, multiset <int> &s, int r, int sq, int eq){
	assert(eq<=B);
	for(int i=sq;i<eq;i++) s.insert(q[r][i]);
}
void removerow(vector<vector<int>> &q, multiset <int> &s, int r, int sq, int eq){
	assert(eq<=B);
	for(int i=sq;i<eq;i++){
		s.erase(s.lower_bound(q[r][i]));
	}
}
int getmed(multiset<int>&s){
	/*int l = *(s.begin()), r = *(s.rbegin());
	while(r-l>1){
		int m = (l+r)/2;
		if( (s.lower_bound(m) - s.begin()) >(s.size()/2)) m = r;
		else l = m;
	}
	return l;*/
	auto x = s.begin();
	advance(x,s.size()/2);
	return *x;
}

int rectangle(int R, int C, int H, int W, int Q[3001][3001]) {
	vector<vector<int>> q(R,vector<int>(C)); A=R, B=C;
	for(int i=0;i<R;i++)
		for(int j=0;j<C;j++)
			q[i][j]=Q[i][j];
	
	multiset<int> s;
	int ans = INT_MAX;
	for(int i=0;i<H;i++)
		for(int j=0;j<W;j++)
			s.insert(q[i][j]);
	for(int i=0;i<=R-H;i++){
		if(!(i%2)){
			for(int j=1;j<=C-W;j++){
				ans = min(ans, getmed(s));
				removecolumn(q,s,j-1,i,i+H);
				addcolumn(q,s,j+W-1,i,i+H);
			}
			ans = min(ans,getmed(s));
			removerow(q,s,i,C-W,C);
			if(i+H<R)addrow(q,s,i+H,C-W,C);
		}else{
			for(int j=C-W-1;j>=0;j--){
				ans = min(ans, getmed(s));
				removecolumn(q,s,j+W,i,i+H);
				addcolumn(q,s,j,i,i+H);
			}
			ans = min(ans,getmed(s));
			removerow(q,s,i,0,W);
			if(i+H<R) addrow(q,s,i+H,0,W);
		}
	}
	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...