1 #include<bits/stdc++.h>
2 using namespace std;
3 int n;
4 int a[1000000],b[1000000],dis[1000000];
5 int lowbit(int x)
6 {
7 return x&(-x);
8 }
9
10 void update(int x,int v )
11 {
12 while(x<=n)
13 {
14 a[x]+=v;
15 x+=lowbit(x);
16 }
17 }
18 int query(int x) //问的是前面有几个比它小的 i-query(x)就是前面有几个比它大的
19 {
20 int sum=0;
21 while(x)
22 {
23 sum+=a[x];
24 x-=lowbit(x);
25 }
26 return sum;
27 }
28 int main()
29 {
30
31 cin>>n;
32 for(int i=1;i<=n;i++) //下面是离散化的框架模板 离散化用于比较数字大小,并不在意数字本身是多少,这样做就可以节省空间
33 {
34 cin>>b[i];
35 dis[i]=b[i];
36 }
37 std::sort(b+1,b+1+n);
38 int len=std::unique(b+1,b+1+n)-b-1;
39 for(int i=1;i<=n;i++)
40 {
41 dis[i]=std::lower_bound(b+1,b+len+1,dis[i])-b;
42 }
43 int ans=0; //局部变量再不赋初值的情况下不会初始化为0
44 for(int i=1;i<=n;i++)
45 {
46 update(dis[i],1);
47 ans+=i-query(dis[i]);
48 }
49 cout<<ans;
50 }