Submission #1164143

#TimeUsernameProblemLanguageResultExecution timeMemory
1164143WH8도서관 (JOI18_library)C++20
100 / 100
127 ms472 KiB
#include <cstdio>
#include <vector>
#include "library.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
int n;
vector<int> ans;
vector<vector<int>> al(1005);

void dfs(int x, int p){
	ans.push_back(x+1);
	for(auto it:al[x]){
		if(it==p)continue;
		dfs(it,x);
	}
}

int qry(int l, int r){
	vector<int> m(n,0);
	for(int i=l; i<=r;i++){
		m[i]=1;
	}
	return Query(m);
}

void Solve(int N)
{
	n=N;
	int res[n]; res[0]=1;
	for(int i=1;i<N;i++){
		res[i]=qry(0, i);
		//~ printf("iteration i = %d\n", i);
		if(res[i]==res[i-1]-1){
			int hi=i-1, lo=0, m, ans=-1;
			while(hi>=lo){
				m=(hi+lo)/2;
				if(qry(m, i-1)>=qry(m,i)){
					ans=m;
					lo=m+1;
				}
				else hi=m-1;
			}
			assert(ans!=-1);
			//~ printf("ans1=%d\n",ans);
			al[ans].pb(i);
			al[i].pb(ans);
			
			hi=i-1, lo=0, ans=-1;
			while(hi>=lo){
				m=(hi+lo)/2;
				if(qry(m, i-1)>=qry(m,i)+1){
					ans=m;
					lo=m+1;
				}
				else hi=m-1;
			}
			assert(ans!=-1);
			//~ printf("ans2=%d\n",ans);
			//~ printf("pushing back ans2=%d to i=%d\n",ans,i);
			al[ans].pb(i);
			al[i].pb(ans);
		}
		else if(res[i]==res[i-1]){
			int hi=i-1, lo=0, m, ans=-1;
			while(hi>=lo){
				m=(hi+lo)/2;
				if(qry(m, i-1)>=qry(m,i)){
					ans=m;
					lo=m+1;
				}
				else hi=m-1;
			}
			assert(ans!=-1);
			al[ans].pb(i);
			al[i].pb(ans);
		}
	}
	int st=0;
	for(int i=0;i<n;i++) if(al[i].size()==1)st=i;
	dfs(st,-1);
	//~ for(int i=0;i<n;i++){
		//~ for(auto it:al[i])cout<<it<< " ";
		//~ cout<<endl;
	//~ }
	//~ for(auto it:ans){
		//~ cout<<it<<" ";
	//~ }
	cout<<endl;
	Answer(ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...