题解:P17854 [LBA-OI R6 B] 凌云沐雨
最多
首先最简单的,对于
假设我们当前有从小到大排好序的集合
考虑新增
容易发现这个
所以我们就可以重复此过程,确定每个元素大小排序,最后还原原排列了。
#include <bits/stdc++.h>
using namespace std;
int n,k;
int ans[1000005];
vector<int>vec;
signed main(){
cin>>n>>k;
vec.push_back(1);
for (int pos=2;pos<=n;pos++){
int m=vec.size()+1;
cout<<"? "<<m<<' ';
for (int i=0;i<vec.size();i++){
cout<<vec[i]<<' ';
}
cout<<pos<<endl;
int c;
cin>>c;
vec.insert(vec.begin()+(c-1),pos);
}
for (int i=0;i<n;i++){
ans[vec[i]]=i+1;
}
cout<<"!";
for (int i=1;i<=n;i++){
cout<<' '<<ans[i];
}
cout<<endl;
return 0;
}