Great_juruo @ 2022-02-06 21:15:28
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=200001;
int n,cnt,ans,sum[N*4];
struct node{
int data,pos;
} a[N];
bool cmp(node x,node y){
if(x.data!=y.data){
return x.data>y.data;
}else{
return x.pos>y.pos;
}
}
int query(int p,int l,int r,int ll,int rr){
if(l>r) return 0;
if(l<=ll&&rr<=r){
return sum[p];
}
int mid=(ll+rr)/2;
int res=0;
if(l<=mid){
res+=query(p*2,l,r,ll,mid);
}
if(mid<r){
res+=query(p*2+1,l,r,mid+1,r);
}
return res;
}
void update(int p,int loc,int num,int l,int r){
if(l==r){
sum[p]+=num;
return ;
}
int mid=(l+r)/2;
if(loc<=mid){
update(p*2,loc,num,l,mid);
}else{
update(p*2+1,loc,num,mid+1,r);
}
sum[p]=sum[p*2]+sum[p*2+1];
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i].data);
a[i].pos=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(i!=1&&a[i].data==a[i-1].data){
cnt++;
} else cnt=0;
ans+=query(1,1,a[i].pos-1,1,n);
ans-=cnt;
update(1,a[i].pos,1,1,n);
}
cout<<ans;
return 0;
}
by Great_juruo @ 2022-02-06 21:16:02
调了一天了
by Xfer_splendor @ 2022-02-06 21:54:56
建议重打