#include<cstdio> #include<algorithm> using namespace std; const int maxn=100010; int a[maxn],b[maxn],t[maxn],n,ans; void read(int &k){ k=0; int f=1; char c=getchar(); while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar(); k*=f; } void add(int x){for(;x<=n;x+=(x&-x)) t[x]++;} //树状数组 int query(int x){int ret=0; for(;x>0;x-=(x&-x)) ret+=t[x]; return ret;} int main(){ read(n); for (int i=1;i<=n;i++) read(a[i]),b[i]=a[i]; int N=n; //离散化 sort(b+1,b+N+1); N=unique(b+1,b+1+n)-b-1; for (int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+N,a[i])-b; for (int i=1;i<=n;i++) ans+=query(a[i]),add(a[i]); //查询比a[i]小的数的个数,并加入a[i] return printf("%d ",n*(n-1)/2-ans),0; }