Submission #250205

#TimeUsernameProblemLanguageResultExecution timeMemory
250205errorgornMinerals (JOI19_minerals)C++14
70 / 100
250 ms6260 KiB
#include <bits/stdc++.h>
#include "minerals.h"
using namespace std;
 
#define rep(x,s,e) for (auto x=s;x<e;x++)
#define sz(x) (int)(x).size()
#define all(x) (x).begin(),(x).end()
 
mt19937 rng(chrono::system_clock::now().time_since_epoch().count());

set<int> in;
int query(int i){
	if (in.count(i)) in.erase(i);
	else in.insert(i);
	
	return Query(i);
}

int curr=0;
void rec(vector<int> v1,vector<int> v2,int flag){
	//0-in out
	//1-in in
	//2-out out
	
	/*
	for (auto &it:v1) cout<<it<<" ";cout<<endl;
	for (auto &it:v2) cout<<it<<" ";cout<<endl;
	for (auto &it:in) cout<<it<<" ";cout<<endl;
	cout<<endl;
	//*/
	
	if (sz(v1)==1){
		Answer(v1[0],v2[0]);
		
		if (flag!=2) curr=query(v1[0]);
		if (flag==1) curr=query(v2[0]);
		return;
	}
	
	vector<int> l1,l2,r1,r2;
	
	int half=sz(v1)/2;
	
	rep(x,0,half){
		if (flag==2) curr=query(v1[x]);
		l1.push_back(v1[x]);
	}
	rep(x,half,sz(v1)){
		if (flag!=2) curr=query(v1[x]);
		r1.push_back(v1[x]);
	}
	
	if (flag!=1){
		for (auto &it:v2){
			int temp=query(it);
			
			if (temp==curr){
				l2.push_back(it);
			}
			else{
				r2.push_back(it);
			}
			
			curr=temp;
		}
		
		rec(l1,l2,1),rec(r2,r1,0);
	}
	else{
		for (auto &it:v2){
			int temp=query(it);
				
			if (temp==curr){
				l2.push_back(it);
			}
			else{
				r2.push_back(it);
			}
			
			curr=temp;
		}
		
		rec(l1,l2,0),rec(r1,r2,2);
	}
}

 
void Solve(int n) {
	vector<int> v1,v2;
	
	rep(x,1,2*n+1){
		int temp=query(x);
		
		if (temp==curr){
			v2.push_back(x);
		}
		else{
			v1.push_back(x);
		}
		
		curr=temp;
	}
	
	rec(v1,v2,1);
}
#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...