Submission #898942

#TimeUsernameProblemLanguageResultExecution timeMemory
898942LCJLYCarnival (CEOI14_carnival)C++14
100 / 100
13 ms708 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define int long long
#define ld long double
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl; 
#define show4(x,y) for(auto it:x) cout << it << " "; cout << #y << endl;
typedef pair<int,int>pii;
//typedef pair<int,pii>pi2;
typedef array<int,4>pi2;

struct DSU{
	vector<int>e;
	void init(int n){
		e=vector<int>(n,-1);
	}
	
	int get(int x){return e[x]<0?x:e[x]=get(e[x]);}
	
	bool unite(int x, int y){
		x=get(x);
		y=get(y);
		if(x==y) return 0;
		if(e[x]>e[y]) swap(x,y);
		e[x]+=e[y];
		e[y]=x;
		return 1;
	}
};

void solve(){	
	int n;
	cin >> n;
	
	DSU dsu;
	dsu.init(n+5);

	for(int x=n-1;x>=1;x--){
		int l=x;
		int r=n;
		int best=n+1;
		int mid;
		while(l<=r){
			mid=(l+r)/2;
			set<int>se;
			cout << mid-x+1 << " ";
			for(int y=x;y<=mid;y++){
				se.insert(dsu.get(y));
				cout << y << " ";
			}
			cout << endl;
			
			int hold;
			cin >> hold;
			
			if(hold<(int)se.size()){
				best=mid;
				r=mid-1;
			}
			else l=mid+1;
		}
		
		if(best!=n+1){
			dsu.unite(x,best);
		}
	}
	
	cout << 0 << " ";
	vector<int>v;
	for(int x=1;x<=n;x++){
		if(dsu.get(x)==x) v.push_back(x);
	}
	
	for(int x=1;x<=n;x++){
		int hold=dsu.get(x);
		cout << lower_bound(v.begin(),v.end(),hold)-v.begin()+1 << " ";
	}
	cout << endl;
}
 
int32_t main(){										
	ios::sync_with_stdio(0);	
	cin.tie(0);
	//freopen("redistricting.in", "r", stdin);
	//freopen("redistricting.out", "w", stdout);
	int t=1;
	//cin >> t;
	while(t--){
		solve();
	}	
}
#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...