树状数组简单应用,逆序数转换为:求前i个数小于x的和。
#include<bits/stdc++.h> #define lowbit(x) x&(-x) using namespace std; typedef long long ll; const int maxn=2e5+10; int sum[maxn],cnt=maxn-1; void add( int x ) { while( x<=cnt ) sum[x]++,x+=lowbit(x); } int query( int x ,int ans=0 ) { while( x ) ans+=sum[x],x-=lowbit(x);return ans; } int main() { int n; cin>>n; ll ans=0; for( int i=1;i<=n;i++ ) { int x;cin>>x;x=1e5+10-x; ans+=query(x-1); add(x); } cout<<ans<<endl; }