#include<bits/stdc++.h>
using namespace std;
const int MAXN=155;
int ans[MAXN],dsu[MAXN],val[MAXN];
int root(int i)
{
if(!dsu[i]) return i;
return dsu[i]=root(dsu[i]);
}
void merge(int i,int j)
{
if((i=root(i))==(j=root(j))) return ;
dsu[j]=i;
}
int ask(int l,int r)
{
cout<<r-l+1<<" ";
for(int i=l;i<=r;i++) cout<<i<<" ";
cout<<endl;
fflush(stdout);
int res;
cin>>res;
return res;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<n;i++)
{
int l=i+1,r=n,pos=n+1;
while(l<=r)
{
int mid=(l+r)/2;
if(ask(i,mid)==ask(i+1,mid)) r=mid-1,pos=mid;
else l=mid+1;
}
if(pos<=n) merge(i,pos);
}
for(int i=1;i<=n;i++) ans[i]=root(i),val[i]=ans[i];
sort(val+1,val+n+1);
int m=0;
for(int i=1;i<=n;i++) if(val[i]!=val[m]) val[++m]=val[i];
cout<<"0 ";
for(int i=1;i<=n;i++) cout<<lower_bound(val+1,val+m+1,ans[i])-val<<" ";
fflush(stdout);
}
# | 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... |