#include<bits/stdc++.h>
using namespace std;
int n;
struct AB{
int s,id;
}a[8003],b[8003];
bool cmp(AB x,AB y){
if(x.s!=y.s)
return x.s<y.s;
return x.id<y.id;
}
int main(){
//freopen("sort1.in","r",stdin);
int q,i;
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++){
scanf("%d",&a[i].s);
b[i].s=a[i].s;
b[i].id=i;
}
sort(b+1,b+n+1,cmp);
for(i=1;i<=n;i++)
a[b[i].id].id=i;
int w,u,v;
while(q--){
scanf("%d%d",&w,&u);
if(w==1){
scanf("%d",&v);
a[u].s=v;
b[a[u].id].s=v;
int k=u;
while(a[k].id<=n&&a[k].id>=1){
if(b[a[k].id].s<b[a[k].id-1].s&&a[k].id!=1||b[a[k].id].s==b[a[k].id-1].s&&b[a[k].id].id<b[a[k].id-1].id&&a[k].id!=1){
int c=a[k].id;
AB t;
swap(a[k].id,a[b[a[k].id-1].id].id);
t=b[c];
b[c]=b[c-1];
b[c-1]=t;
k--;
}
else if(b[a[k].id].s>b[a[k].id+1].s&&a[k].id!=n||b[a[k].id].s==b[a[k].id+1].s&&b[a[k].id].id>b[a[k].id+1].id&&a[k].id!=n){
int c=a[k].id;
AB t;
swap(a[k].id,a[b[a[k].id+1].id].id);
t=b[c];
b[c]=b[c+1];
b[c+1]=t;
k++;
}
else
break;
}
}
else
printf("%d\n",a[u].id);
}
return 0;
}
过了题目的样例1和样例2,调了好多遍,不知道错哪了