#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int maxn=100000;
ll a[maxn+10],sum[maxn+10],N;
void add(ll x)
{
while(x<=maxn){
sum[x]++;
x+=(-x)&x;
}
}
ll query(ll x){
ll res=0;
while(x){
res+=sum[x];
x-=(-x)&x;
} return res;
}
int main()
{
ll i, ans=0;
scanf("%lld",&N);
for(i=1;i<=N;i++) scanf("%lld",&a[i]),a[i]++;
for(i=N;i>=1;i--){
ans+=query(a[i]-1);
add(a[i]);
}
printf("%lld\n",ans);
return 0;
}
树状数组求逆序对数
最新推荐文章于 2024-07-12 17:38:39 发布