帮忙找一下错误,编译失败
查看原帖
帮忙找一下错误,编译失败
1189340
aishiteru_mitsu_ha楼主2024/1/18 17:59
#include<bits/stdc++.h>
using namespace std;
long long tree[500010],cnt1,cnt2=1,n;
struct node{
    int id,num,hash;
}a[500010];
bool cmp1(node x,node y){
    return x.id<y.id;
}
bool cmp2(node x,node y){
    return x.hash<y.hash
}
int lowbit(int a){
    return a&(-a);
}
void update(int a,int b){
    while(a<=n){
        tree[a]+=b;
        a+=lowbit(a);
    }
}
int getsum(int a){
    int sum=0;
    while(a>0){
        sum+=tree[a];
        a-=lowbit(a);
    }
    return sum;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].num;
        a[i].id=i;
    }
    sort(a+1,a+n,cmp2);
    a[1].hash=1;
    for(int i=2;i<=n;i++){
        if(a[i].num==a[i-1].num){
            a[i].hash=a[i-1].hash;
        }else{
            a[i].hash=++cnt2;
        }
    }
    sort(a+1,a+n,cmp1);
    for(int i=1;i<=n;i++){
        update(a[i].hash,1);
    }
    for(int i=1;i<=n;i++){
        cnt1+=getsum(a[i].hash);
    }
    cout<<cnt1;
    return 0;
}
2024/1/18 17:59
加载中...