Submission #488198

#TimeUsernameProblemLanguageResultExecution timeMemory
488198PixelCatMinerals (JOI19_minerals)C++14
100 / 100
38 ms2544 KiB
#include <bits/stdc++.h>
#include "minerals.h"
using namespace std;
#define For(i,a,b)    for(int i=a;i<=b;i++)
#define eb emplace_back
#define all(x) x.begin(),x.end()
#define sz(x) ((int)x.size())

bool toggle(int x){
	static int last=0;
	int now=Query(x);
	bool ans=(now==last);
	last=now;
	return ans;
}

void solve(vector<int> &vl,vector<int> &vr,int l,int r,bool fill){
	if(sz(vl)==1){
		Answer(vl[0],vr[l]);
		return;
	}
	int n=max(1,sz(vl)/3);
	int m=sz(vl)-n;
	For(i,l,l+n-1) toggle(vr[i]);
	vector<int> vll,vlr;
	for(auto &i:vl){
		if(sz(vll)==n) vlr.eb(i);
		else if(sz(vlr)==m) vll.eb(i);
		else{
			bool res=toggle(i);
			if(fill!=res) vll.eb(i);
			else vlr.eb(i);
		}
	}
	solve(vll,vr,l,l+n-1,!fill);
	solve(vlr,vr,l+n,r,fill);
}

void Solve(int32_t n){
	vector<int> l,r;
	For(i,1,n*2){
		if(toggle(i)) l.eb(i);
		else r.eb(i);
	}
	random_shuffle(all(r));
	solve(l,r,0,n-1,true);
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...