#include<bits/stdc++.h>
using namespace std;
struct node
{
int id,va;
friend bool operator<(const node &x,const node &y)
{
return x.va<y.va||x.va==y.va&&x.id<y.id;
}
friend bool operator>(const node &x,const node &y)
{
return y<x;
}
};
int c[500010],i,n,x;
long long sumn;
node a[500010];
map<int,int>mpa;
map<node,int>mp;
int lowbit(int x)
{
return x&-x;
}
void updat(int x,int y)
{
int i;
for(i=x;i<=n;i+=lowbit(i))
c[i]+=y;
return;
}
long long summ(int x)
{
int i;
long long ans=0ll;
for(i=x;i>=1;i-=lowbit(i))
ans+=c[i];
return ans;
}
int main()
{
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&a[i].va);
a[i].id=i;
mp[a[i]]=i;
}
sort(a+1,a+n+1);
for(i=1;i<=n;++i)
a[i].va=mp[a[i]];
for(i=1;i<=n;++i)
mpa[a[i].va]=i;
for(i=1;i<=n;++i)
a[i].va=mpa[i];
for(i=1;i<=n;++i)
{
sumn+=i-summ(a[i].va)-1;
updat(a[i].va,1);
}
printf("%lld",sumn);
return 0;
}
结果,悬赏关注。