#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
const int off=1<<19;
const int inf=1e9+4;
const int mxsz=2e5+4;
vector<int>un;
int q(int k,vector<int>a){
cout<<k<<" ";
for (auto x:a){
cout<<x<<" ";
}
cout<<endl;
cout<<flush;
int x=0;
if (k!=0){
cin>>x;
}
return x;
}
int main(){
int n;
cin>>n;
int x;
un.pb(1);
vector<int>adj[n+1];
int ans[n+1]={};
for (int i=2;i<=n;i++){
vector<int>ch=un;
ch.pb(i);
x=q(ch.size(),ch);
// if (i==5){
// cout<<x<<" "<<un.size()<<" "<<ch.size()<<endl;
// for (auto x:un){
// cout<<x<<" ";
// }cout<<endl;
// }
if (x==un.size()+1){
un.pb(i);
}else if (x==un.size()){
int l=0,r=un.size()-1;
int cs=-1;
while (l<=r){
int mid=(l+r)/2;
vector<int>no;
for (int j=l;j<=mid;j++){
no.pb(un[j]);
}
no.pb(i);
if (q(no.size(),no)==no.size()-1){
cs=no[mid];
r=mid-1;
}else{
l=mid+1;
}
}
adj[cs].pb(i);
}
}
int cnt=1;
for (int i=1;i<=n;i++){
if (ans[i]==0){
ans[i]=cnt;
cnt++;
}
for (auto x:adj[i]){
ans[x]=ans[i];
}
}
vector<int>out;
for (int i=1;i<=n;i++){
out.pb(ans[i]);
}
q(0,out);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |