13,825
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#define MAXN 40000
using namespace std;
struct A{
int fx,id;
}c[MAXN+5];
int n;
long long ans=0;
int a[MAXN+5],b[MAXN+5];
int cmp(const void *x,const void *y){
return ((struct A *)x)->fx-((struct A *)y)->fx;
}
int lowbit(int x){return x&(-x);}
void update(int x,int v){
int i;
for(i=x;i<=n;i+=lowbit(i))
a[i]+=v;
}
int sum(int x){
int s=0,i;
for(i=x;i>=1;i-=lowbit(i))
s+=a[i];
return s;
}
int main(){
int i,j;
//freopen("reverse.in","r",stdin);
//freopen("reverse.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&c[i].fx);
c[i].id=i;
}
qsort(c+1,n,sizeof(c[0]),cmp);
for(i=1;i<=n;i++){
b[c[i].id]=i;
a[i]=0;
}
for(i=n;i>=1;i--){
ans+=sum(b[i]-1);
update(b[i],1);
}
printf("%lld",ans);
return 0;
}