https://codeforces.com/contest/1407/problem/C 交互题 对于i,j,如果ai%aj<aj%ai,则aj<ai。每次登都进行两个数的前后的相互询问,都能找出最小值放到该放的地方,这样一共2*n次。剩下最大的就为最大值。
#include<bits/stdc++.h> #define ll long long #define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0); using namespace std; const int maxn=1e4+5,INF=0x3f3f3f3f; int a[maxn]; int ask(int x,int y) { cout<<"? "<<x<<" "<<y<<endl; int sum=0; cin>>sum; return sum; } int main() { ios; int cur=1,n; cin>>n; for(int i=2;i<=n;i++) { int l=ask(cur,i),r=ask(i,cur); if(l<r) { a[i]=r; } else { a[cur]=l; cur=i; } } a[cur]=n; cout<<"! "; for(int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }