只能过前三个点求调
查看原帖
只能过前三个点求调
939844
LUJINGYU楼主2024/8/31 16:54
#include<bits/stdc++.h>
using namespace std;

struct node{
    int v,id;
} b[200005];

int a[200005],n,Q;
int pm[200005];
int c1,c2,c3,c4;

int cmp(node a,node b){
    if(a.v==b.v) return a.id<b.id;
    return a.v<b.v;
}

int main(){
    scanf("%d%d",&n,&Q);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        b[i].v=a[i];
        b[i].id=i;
    }
    sort(b+1,b+n+1,cmp);
    for(int i=1;i<=n;i++){
        pm[b[i].id]=i;
    }
    for(int j=0;j<Q;j++){
        scanf("%d",&c1);
        if(c1==1){
            scanf("%d%d",&c2,&c3);
            int sum=a[c2];
            b[pm[c2]].v=c3;
            if(sum==c3) continue;
            for(int i=n;i>=2;i--){
                if(b[i].v>=b[i-1].v||b[i].v==b[i-1].v&&b[i].id>b[i-1].id)
                    swap(b[i],b[i-1]);
            }
            for(int i=2;i<=n;i++){
                if(b[i].v<=b[i-1].v||b[i].v==b[i-1].v&&b[i].id<b[i-1].id)
                    swap(b[i],b[i-1]);
            }
            for(int i=1;i<=n;i++)
                pm[b[i].id]=i;
        }
        else{
            scanf("%d",&c4);
            printf("%d\n",pm[c4]);
        }
    }
    return 0;
}
//求大佬帮调
2024/8/31 16:54
加载中...