题解:[Algo Beat Contest 002 B] Bicycle Competition
题面展示
自行车比赛中有
1 x:编号为
2 x:询问排名为
3 x:询问编号为
解题思路
考虑维护排名为
在修改操作时,如
那么直接交换一下,然后更新两名选手的排名。
查询随便查。
代码展示
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[200005],p[200005];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,q;
cin>>n>>q;
for (int i=1;i<=n;i++)cin>>a[i],p[a[i]]=i;
while (q--){
int op,x;
cin>>op>>x;
if (op==1){
if (a[x]==1)continue;
int rnk=a[x];
swap(p[rnk],p[rnk-1]);
a[p[rnk]]=rnk;
a[p[rnk-1]]=rnk-1;
}
else if (op==2){
cout<<p[x]<<"\n";
}
else{
cout<<a[x]<<"\n";
}
}
return 0;
}