调了两天了,求助
查看原帖
调了两天了,求助
366595
zty_luogu楼主2021/10/29 13:14
#include<bits/stdc++.h>
using namespace std;
struct arr{
    int val;
    int pos;
};
bool cmp(arr x,arr y){
    return x.val<y.val;
}
//1 6 8 5 7
//1 4 5 2 3
//1 5 6 7 8
//1 4 2 5 3
arr a[8010],b[8010];
int main(){
    int m,n;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i].val;
        b[i].pos=i;
        b[i].val=a[i].val;
    }
    sort(b+1,b+n+1,cmp);
    for(int i=1;i<=n;i++){
        a[b[i].pos].pos=i;
    }
    for(int i=1;i<=m;i++){
        int f;
        cin>>f;
        if(f==2){
            int x;
            cin>>x;
            cout<<a[x].pos<<endl;
        }else{
            int x,v;
            cin>>x>>v;
            a[x].val=v;
            int xx=a[x].pos;
            b[xx].val=v;
            while(xx<n&&(b[xx].val>b[xx+1].val
                         ||b[xx].val==b[xx+1].val&&b[xx].pos>b[xx+1].pos)){
                swap(a[b[xx].pos].pos,a[b[xx+1].pos].pos);
                swap(b[xx],b[xx+1]);
                xx++;
            }
            while(xx>1&&(b[xx].val<b[xx-1].val
                         ||b[xx].val==b[xx-1].val&&
                         b[xx].pos<b[xx-1].pos)){
                swap(a[b[xx].pos].pos,a[b[xx-1].pos].pos);
                swap(b[xx],b[xx-1]);
                xx--;
            }
//          for(int i=1;i<=n;i++){
//              cout<<a[i].val<<' ';
//          }
//          cout<<endl;
//          for(int i=1;i<=n;i++){
//              cout<<a[i].pos<<' ';
//          }
        }
    }
    return 0;
}

40分好像相同元素有问题 非考场代码,我废了

2021/10/29 13:14
加载中...