悬关
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,q,a[8010],flag=1,ca[8010],head;
struct node{
int zhi,wei;
}b[8010];
bool cmp(node x,node y){
if(x.zhi==y.zhi){
return x.wei<y.wei;
}
return x.zhi<y.zhi;
}
signed main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i].zhi=a[i];
b[i].wei=i;
}
sort(b+1,b+n+1,cmp);
for(int i=1;i<=n;i++){
ca[b[i].wei]=i;
}
while(q--){
int c,x,v;
cin>>c;
if(c==1){
int key;
cin>>x>>v;
for(int i=1;i<=n;i++){
if(b[i].wei==x){
b[i].zhi=v;
key=i;
break;
}
}
if(v<b[1].zhi||v==b[1].zhi&&b[key].wei<b[1].wei){
node tmp=b[1];
b[1]=b[key];
ca[b[key].wei]=1;
for(int j=key-1;j>=2;j--){
b[j+1]=b[j];
ca[b[j].wei]++;
}
b[2]=tmp;
ca[tmp.wei]=2;
continue;
}
else if(v>b[n].zhi||v==b[n].zhi&&b[key].wei>b[n].wei){
node tmp=b[n];
b[n]=b[key];
ca[b[key].wei]=n;
for(int j=key+1;j<=n-1;j++){
b[j-1]=b[j];
ca[b[j].wei]--;
}
b[n-1]=tmp;
ca[tmp.wei]=n-1;
continue;
}
else if(b[key].zhi>b[key+1].zhi||b[key].zhi==b[key+1].zhi&&b[key].wei>b[key+1].wei)
for(int i=key+1;i<=n;i++){
if(b[i].zhi>b[key].zhi||b[i].zhi==b[key].zhi&&b[i].wei<b[key].wei){
node tmp=b[i-1];
b[i-1]=b[key];
ca[b[key].wei]=i-1;
for(int j=i-1;j>=key+1;j--){
if(j!=i-1)
b[j-1]=b[j];
else
b[i-2]=tmp;
ca[b[j-1].wei]--;
}
break;
}
}
else if(b[key].zhi<b[key-1].zhi||b[key].zhi==b[key-1].zhi&&b[key].wei<b[key-1].wei)
for(int i=key-1;i>=1;i--){
if(b[i].zhi<b[key].zhi||b[i].zhi==b[key].zhi&&b[i].wei>b[key].wei){
node tmp=b[i+1];
b[i+1]=b[key];
ca[b[key].wei]=i+1;
for(int j=key;j>=i+2;j--){
if(j!=i+2)
b[j]=b[j-1];
else
b[i+2]=tmp;
ca[b[j].wei]++;
}
break;
}
}
for(int i=1;i<=n;i++){
ca[b[i].wei]=i;
}
}
else{
cin>>x;
cout<<ca[x]<<endl;
}
}
}