Submission #1140927

#TimeUsernameProblemLanguageResultExecution timeMemory
1140927vladiliusCarnival (CEOI14_carnival)C++20
100 / 100
5 ms452 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    auto ask = [&](vector<int> x){
        cout<<x.size()<<"\n";
        for (int i: x){
            cout<<i<<" ";
        }
        cout<<"\n";
        cout.flush();
        int f; cin>>f;
        return f;
    };
    
    auto get = [&](int l, int r){
        vector<int> x;
        for (int i = l; i <= r; i++){
            x.pb(i);
        }
        return ask(x);
    };
    
    int n; cin>>n;
    vector<int> a(n + 1);
    
    auto f = [&](int l, int r){
        set<int> st;
        for (int i = l; i <= r; i++){
            st.insert(a[i]);
        }
        return (int) st.size();
    };
    
    int cc = 0;
    for (int i = 1; i <= n; i++){
        if (i == 1|| get(1, i) != f(1, i - 1)){
            a[i] = ++cc;
            continue;
        }
        
        int l = 1, r = i - 1;
        while (l + 1 < r){
            int m = (l + r) / 2;
            if (get(m, i) == f(m, i - 1)){
                l = m;
            }
            else {
                r = m - 1;
            }
        }
        
        if (get(r, i) == f(r, i - 1)) l = r;
        
        a[i] = a[l];
    }
    
    for (int i = 0; i <= n; i++){
        cout<<a[i]<<" ";
    }
    cout<<"\n";
}
#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...