#include <iostream> #include <cstring> #include <stack> #include <cstdio> #include <cmath> #include <queue> #include <algorithm> #include <vector> #include <set> #include <map> using namespace std; #define ll long long const int N=500005; int a[N],b[N],c[N],d[N],n,m=0; void discrete() { for(int i=1;i<=n;i++) d[i]=a[i]; sort(d+1,d+n+1); for(int i=1;i<=n;i++) { if(i==1||d[i]!=d[i-1]) b[++m]=d[i]; } } int query(int x) { return lower_bound(b+1,b+m+1,x)-b; } int ask(int x) { int ans=0; for(;x;x-=x&-x) { ans=ans+c[x]; } return ans; } void add(int x,int y) { for(;x<=N-1;x+=x&-x) c[x]+=y; } int main() { ll ans=0; cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } discrete(); for(int i=1;i<=n;i++) { add(query(a[i]),1); ans+=i-ask(query(a[i])); } cout<<ans<<"\n"; return 0; }
原文地址:https://www.cnblogs.com/hh13579/p/11384484.html
时间: 2024-10-21 21:58:38