Submission #250159

#TimeUsernameProblemLanguageResultExecution timeMemory
250159errorgornMinerals (JOI19_minerals)C++14
40 / 100
33 ms3576 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(42069);

void rec(vector<int> v, bool filled){
	//for (auto &it:v) cout<<it<<" ";cout<<endl;
	
	if (sz(v)==2){
		Answer(v[0],v[1]);
		
		if (filled) Query(v[0]),Query(v[1]);
		
		return;
	}
	
	int ss=1;
	while (ss<sz(v)/2) ss<<=1;
	ss>>=1;
	
	vector<int> l,r;
	if (!filled){
		for (auto &it:v){
			if (Query(it)>ss){
				r.push_back(it);
				Query(it);
			}
			else{
				l.push_back(it);
			}
		}
	}
	
	else{
		int curr=v.size()/2;
		
		vector<int> temp;
		while (curr>ss){
			curr=Query(v.back());
			temp.push_back(v.back());
			v.pop_back();
		}
		
		while (!v.empty()){
			l.push_back(v.back());
			v.pop_back();
		}
		
		for (auto &it:temp){
			if (Query(it)>ss){
				r.push_back(it);
				Query(it);
			}
			else{
				l.push_back(it);
			}
		}
	}
	
	rec(l,true),rec(r,false);
}

void Solve(int n) {
	vector<int> v;
	rep(x,1,2*n+1) v.push_back(x);
	
	rec(v,false);
}
#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...