题目来源:http://www.luogu.org/problem/show?pid=1908
搞来搞去,还是SYZOJ自带代码框最好用
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=40000+10;
int n,c[maxn];
struct data{
long long v;
int ii;
}a[maxn];
inline int lowbit(int x){return x&-x;}
inline int cmp1(data a,data b){
return a.v<b.v;
}
inline int cmp2(data a,data b){
return a.ii<b.ii;
}
inline void add(int x,int d){
while(x<=n){
c[x]+=d;x+=lowbit(x);
}
}
inline int sum(int x){
int ret=0;
while(x>0){
ret+=c[x];x-=lowbit(x);
}
return ret;
}
int main(){
ios::sync_with_stdio(false);
cin>>n;
long long ans=0;
for(int i=1;i<=n;i++){
cin>>a[i].v;
a[i].ii=i;
}
sort(a+1,a+1+n,cmp1);
for(int i=1;i<=n;i++){
a[i].v=i;
}
sort(a+1,a+1+n,cmp2);
for(int i=n;i>=1;i--){
add(a[i].v,1);
ans+=sum(a[i].v-1);
}
cout<<ans;
return(0);
}