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;
}