Submission #376446

#TimeUsernameProblemLanguageResultExecution timeMemory
376446peijarLibrary (JOI18_library)C++17
100 / 100
372 ms492 KiB
#include <bits/stdc++.h>
#include "library.h"
using namespace std;

void Solve(int nbElem)
{
	vector<int> ret(nbElem);
	if (nbElem == 1)
	{
		ret[0] = 1;
		Answer(ret);
		return ;
	}
	vector<int> tabRequete(nbElem,1);
	int extremGauche=-1;
	for (int i(0); i < nbElem; ++i)
	{
		tabRequete[i] = 0;
		int query = Query(tabRequete);
		tabRequete[i] = 1;
		if (query == 1)
		{
			extremGauche = i;
			break;
		}
	}
	fill(tabRequete.begin(), tabRequete.end(), 0);
	tabRequete[extremGauche] = 1;
	vector<int> restant;
	for (int i(0); i < nbElem; ++i)
		if (i != extremGauche)
			restant.push_back(i);

	ret[0] = extremGauche;
	for (int i(1); i < nbElem; ++i)
	{
		int deb(0), fin((int)restant.size()-1);
		while (deb < fin)
		{
			int mid = (deb + fin) / 2;
			tabRequete.assign(nbElem, 0);
			for (int iReq(deb); iReq <= mid; ++iReq)
				tabRequete[restant[iReq]] = 1;
			int retSans = Query(tabRequete);
			tabRequete[ret[i-1]] = 1;
			int retAvec = Query(tabRequete);
			if (retAvec == retSans)
				fin = mid;
			else
				deb = mid+1;
		}
		ret[i] = restant[deb];
		restant.erase(lower_bound(restant.begin(), restant.end(), restant[deb]));
	}
	for (auto &v : ret) v++;
	Answer(ret);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...