求教

P1908 逆序对

huangwux @ 2019-09-18 13:11:35

#include<bits/stdc++.h>
using namespace std;
int a[500050],c[1000000001],n;
int lowbit(int x){
    return x&-x;
}
void add(int x,int v){
    for(;x<=n;x+=lowbit(x)){
        c[x]+=v;
    }
}

int ask(int x){
    int sum=0;
    for(;x;x-=lowbit(x)){
        sum+=c[x];
    }
    return sum;
}
 int ans;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    } 
    for(int i=n;i>=1;i--){
        ans+=ask(a[i]-1);
        add(a[i],1);
    }
    printf("%d",ans);
}

我知道没离散化所以会RE 但是为什么测我自己手造的小数据答案也不对?


|