#include<bits/stdc++.h>
using namespace std;
int n,q;
int t[8005];
int chk,x,v;
struct numb{
int a,i;
}e[8005];
bool cmp(numb x,numb y){
if(x.a!=y.a) return x.a<y.a;
return x.i<y.i;
}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d",&e[i].a),e[i].i=i;
sort(e+1,e+n+1,cmp);
for(int i=1;i<=n;i++) t[e[i].i]=i;
for(int k=1;k<=q;k++){
scanf("%d",&chk);
if(chk==1){
scanf("%d%d",&x,&v);
e[t[x]].a=v;
for(int i=2;i<=n;i++)
if(cmp(e[i],e[i-1]))
swap(e[i],e[i-1]);
for(int i=n;i>=2;i--)
if(cmp(e[i],e[i-1]))
swap(e[i],e[i-1]);
for(int i=1;i<=n;i++)
t[e[i].i]=i;
}
if(chk==2){
scanf("%d",&x);
printf("%d\n",t[x]);
}
}
return 0;
}
为啥需要前后各扫一遍才能过,我的解法和第一篇题解差不多