Submission #1161870

#TimeUsernameProblemLanguageResultExecution timeMemory
1161870simona1230Carnival (CEOI14_carnival)C++17
0 / 100
0 ms412 KiB
#include <bits/stdc++.h>
using namespace std;

int n;
int a[151],c[151];

int query(int l,int r,int id)
{
    cout<<r-l+2<<" ";
    for(int i=l;i<=r;i++)
        cout<<i<<" ";
    if(id!=-1)cout<<id<<endl;
    else cout<<endl;
    int x;
    cin>>x;
    return x;
}

void rec(int l,int r)
{
    if(l==r)
    {
        a[l]=1;
        return;
    }

    if(l>r)return;

    int m=(l+r)/2;
    rec(l,m);
    rec(m+1,r);

    int num=0,diff;
    for(int i=l;i<=m;i++)
        num=max(num,a[i]);
    diff=num;
    for(int i=m+1;i<=r;i++)
        c[a[i]]=0;

    for(int i=m+1;i<=r;i++)
    {
        if(c[a[i]])
        {
            a[i]=c[a[i]];
            continue;
        }
        int lf=l,rt=m;
        int idx=-1;
        while(lf<=rt)
        {
            int md=(lf+rt)/2;
            if(query(l,md,i)==query(l,md,-1))
            {
                idx=md;
                rt=md-1;
            }
            else lf=md+1;
        }

        if(idx==-1)
        {
            diff++;
            c[a[i]]=diff;
            a[i]=diff;
        }
        else
        {
            c[a[i]]=a[idx];
            a[i]=a[idx];
        }
    }
}
int main()
{
    cin>>n;
    rec(1,n);
    cout<<0<<" ";
    for(int i=1;i<=n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}
#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...