Submission #1344266

#TimeUsernameProblemLanguageResultExecution timeMemory
1344266srividya_06Staring Contest (BOI23_staringcontest)C++20
0 / 100
8 ms424 KiB
#include <bits/stdc++.h>
#define int long long
#define REP(i,a,b) for(int i = a; i<b; i++)
#define RREP(i,a,b) for(int i = a; i>b; i--)
using namespace std;
int INF = 1e18,mx,p,val;
vector<int> res;
void update(int a, int b){
    cout<<"? "<<a+1<<' '<<b+1<<endl;
    cin>>val;
    if(val==res[mx]) {
        res[b] = val;
        int tmp = p;
        p = mx;
        mx = b;
        update(b,tmp);
    }
    else if(val>res[mx]){
        res[mx] = val;
        res[b] = val;
    }
    else res[b] = val;
}
int32_t main() {
    int n;
    cin>>n;
    res.resize(n);
    if(n<=3){
        REP(i,0,n-1){
            REP(j,i+1,n){
                cout<<"? "<<i+1<<' '<<j+1<<endl;
                cin>>val;
                res[i] = max(res[i],val);
                res[j] = max(res[j],val);
            }
        }
    }
    else{
        REP(i,0,2){
            REP(j,i+1,3){
                cout<<"? "<<i+1<<' '<<j+1<<endl;
                cin>>val;
                res[i] = max(res[i],val);
                res[j] = max(res[j],val);
            }
        }
        mx = max_element(res.begin(),res.begin()+3)-res.begin();
        p = max_element(res.begin()+mx+1,res.begin()+3)-res.begin();
        REP(i,3,n){
            if(i == mx) continue;
            update(mx,i);
        }
    }
    cout<<"! ";
    REP(i,0,n){
        cout<<res[i]<<' ';
    }
    cout<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...