#include<bits/stdc++.h>
using namespace std;
struct node{
int id,dt;
}a[8100];
int b[8100];
int cmp(node x,node y){
if(x.dt!=y.dt)return x.dt<y.dt;
return x.id<y.id;
}
int main(){
int n,Q;
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].dt);
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
b[a[i].id]=i;
}
while(Q--){
int flag;
scanf("%d",&flag);
if(flag==2){
int x;
scanf("%d",&x);
printf("%d\n",b[x]);
}else{
int x,y;
scanf("%d%d",&x,&y);
a[b[x]].dt=y;
for(int i=2;i<=n;i++){
if(a[i].dt<a[i-1].dt)swap(a[i],a[i-1]);
if(a[i].dt==a[i-1].dt){
if(a[i].id<a[i-1].id)swap(a[i],a[i-1]);
}
}
for(int i=n-1;i>=1;i--){
if(a[i].dt>a[i+1].dt)swap(a[i],a[i+1]);
if(a[i].dt==a[i+1].dt){
if(a[i].id>a[i+1].id)swap(a[i],a[i+1]);
}
}
for(int i=1;i<=n;i++){
b[a[i].id]=i;
}
}
}
return 0;
}
就是中间else里面的两个循环排序,可以说一下是为什么嘛! 为什么这样就可以保证是排好序的了