#include "minerals.h"
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define ff first
#define ss second
#define vi vector<int>
#define vl vector<long long>
#define pii pair<int,int>
#define pll pair<long long, long long>
#define pb push_back
#define rep(i, b) for(int i = 0; i < (b); ++i)
#define rep2(i,a,b) for(int i = a; i <= (b); ++i)
#define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c)
#define count_bits(x) __builtin_popcountll((x))
#define all(x) (x).begin(),(x).end()
#define siz(x) (int)(x).size()
#define forall(it,x) for(auto& it:(x))
using namespace std;
//mt19937 mt;void random(){mt.seed(chrono::time_point_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());}
//ll rand(ll a, ll b) {return a + (mt() % (b-a+1));}
const int INF = 1e9+50;
const ll INF_L = 1e18+40;
const ll MOD = 1e9+7;
bool is_on[86001];
int ask(int x)
{
    //cout << x << " x\n";
    if(is_on[x]) is_on[x] = 0;
    else is_on[x] = 1;
    return Query(x);
}
pii seg[86001];
int cur_pref[86001];
void Solve(int n) 
{
    if(n <= 100)
    {
        rep2(i,1,n*2)
        {
            seg[i] = {1,2*n};
        }
        int ans_count = 0;
        int cur_dif = 0;
        rep2(i,1,n)
        {
            cur_dif = ask(i);
        }
        vector<pii> prefs = {{1,n*2}};
        rep2(i,1,n*2)
        {
            cur_pref[i] = 0;
        }
        while(ans_count != 2*n)
        {
            //cout << cur_dif << " cur\n";
            //rep2(i,1,n*2)
        // {
            //    cout << seg[i].ff << " " << seg[i].ss << " " << i << " step_seg\n";
            //}
            //cout << "\n";
            ans_count = 0;
            rep2(i,1,n*2)
            {
                if(seg[i].ff != seg[i].ss)
                {
                    int new_dif = ask(i);
                    int mid = (prefs[cur_pref[i]].ff + prefs[cur_pref[i]].ss)/2;
                    if(is_on[i])
                    {
                        if(new_dif > cur_dif)
                        {
                            seg[i].ff = mid+1;
                        }
                        else
                        {
                            seg[i].ss = mid;
                        }
                    }
                    else
                    {
                        if(new_dif < cur_dif)
                        {
                            seg[i].ff = mid+1;
                        }
                        else
                        {
                            seg[i].ss = mid;
                        }
                    }
                    ask(i);
                }
                else
                {
                    ans_count++;
                }
            }
            vector<pii> new_pref;
            forall(it,prefs)
            {
                if(it.ff == it.ss) continue;
                int mid = (it.ff+it.ss)/2;
                rep2(i,(it.ff+mid)/2+1,mid)
                {
                    cur_dif = ask(i);
                }
                rep2(i,mid+1,(mid+1+it.ss)/2)
                {
                    cur_dif = ask(i);
                }
                new_pref.pb({it.ff,mid});
                new_pref.pb({mid+1,it.ss});
            }
            prefs = new_pref;
            vector<pii> vsort;
            rep2(i,1,n*2)
            {
                if(seg[i].ff != seg[i].ss)
                {
                    vsort.pb({seg[i].ff,i});
                }
            }
            sort(all(vsort));
            int cur_p = 0;
            forall(it,vsort)
            {
                while(prefs[cur_p].ff != seg[it.ss].ff)
                {
                    cur_p++;
                }
                cur_pref[it.ss] = cur_p;
            }
        }
        rep2(i,1,n*2)
        {
        //  cout << i << " " << seg[i].ff << " seg\n";
            if(i < seg[i].ff)
            {
                Answer(i,seg[i].ff);
            }
        }
    }
    else
    {
        rep2(i,1,n)
        {
            seg[i] = {n+1,2*n};
        }
        int ans_count = 0;
        int cur_dif = 0;
        rep2(i,n+1,(3*n+1)/2)
        {
            cur_dif = ask(i);
        }
        vector<pii> prefs = {{n+1,n*2}};
        rep2(i,1,n)
        {
            cur_pref[i] = 0;
        }
        while(ans_count != 2*n)
        {
            //cout << cur_dif << " cur\n";
            //rep2(i,1,n*2)
        // {
            //    cout << seg[i].ff << " " << seg[i].ss << " " << i << " step_seg\n";
            //}
            //cout << "\n";
            ans_count = 0;
            rep2(i,1,n)
            {
                if(seg[i].ff != seg[i].ss)
                {
                    int new_dif = ask(i);
                    int mid = (prefs[cur_pref[i]].ff + prefs[cur_pref[i]].ss)/2;
                    if(is_on[i])
                    {
                        if(new_dif > cur_dif)
                        {
                            seg[i].ff = mid+1;
                        }
                        else
                        {
                            seg[i].ss = mid;
                        }
                    }
                    else
                    {
                        if(new_dif < cur_dif)
                        {
                            seg[i].ff = mid+1;
                        }
                        else
                        {
                            seg[i].ss = mid;
                        }
                    }
                    ask(i);
                }
                else
                {
                    ans_count++;
                }
            }
            vector<pii> new_pref;
            forall(it,prefs)
            {
                if(it.ff == it.ss) continue;
                int mid = (it.ff+it.ss)/2;
                rep2(i,(it.ff+mid)/2+1,mid)
                {
                    cur_dif = ask(i);
                }
                rep2(i,mid+1,(mid+1+it.ss)/2)
                {
                    cur_dif = ask(i);
                }
                new_pref.pb({it.ff,mid});
                new_pref.pb({mid+1,it.ss});
            }
            prefs = new_pref;
            vector<pii> vsort;
            rep2(i,1,n)
            {
                if(seg[i].ff != seg[i].ss)
                {
                    vsort.pb({seg[i].ff,i});
                }
            }
            sort(all(vsort));
            int cur_p = 0;
            forall(it,vsort)
            {
                while(prefs[cur_p].ff != seg[it.ss].ff)
                {
                    cur_p++;
                }
                cur_pref[it.ss] = cur_p;
            }
        }
        rep2(i,1,n)
        {
        //  cout << i << " " << seg[i].ff << " seg\n";
            Answer(i,seg[i].ff);
        }    
    }
}
| # | 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... | 
| # | 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... |