...
5
4 3 2 5 1(用树状数组\(a[i]-n\))
0 0 0 1 1
0 0 1 2 2
0 1 2 3 3
0 1 2 3 4
1 2 3 4 5
#include <iostream>
using namespace std;
int a[200010], p[200010], t[200010], n;
void change(int u){
for(;u<=n;u+=u&-u)t[u]++;
}
int ask(int u){
int ans=0;
for(;u;u-=u&-u)ans+=t[u];
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),p[a[i]]=i;
int ans=0;
for(int i=1;i<=n;i++){
ans+=ask(n)-ask(a[i]);
change(a[i]);
}
printf("%d",ans);
}