只有 50 pts,其他全超时。
#include<bits/stdc++.h>
using namespace std;
constexpr int N=5e5+5;
struct _{
int t,v,p,id;
_()=default;
_(int t,int v,int p,int id):t(t),v(v),p(p),id(id){}
};
_ I[N];
map<int,int> mp;
long long ans[1];
int a[N],bit[N],n,tot=0;
inline int lowbit(int qwq){
return qwq&-qwq;
}
inline void add(int p,int v){
for(;p<=n;p+=lowbit(p)) bit[p]+=v;
return;
}
inline int query(int p){
int res=0;
for(;p;p-=lowbit(p)) res+=bit[p];
return res;
}
inline void solve(int l,int r){
if(l==r) return;
int mid=(l+r)>>1,j;
solve(l,mid),solve(mid+1,r);
sort(I+l,I+mid+1,[](const _& a,const _& b)->bool{
return a.v<b.v;
});
sort(I+mid+1,I+r+1,[](const _& a,const _& b)->bool{
return a.v<b.v;
});
j=l;
for(int i=mid+1;i<=r;++i){
while(j<=mid&&I[j].v<I[i].v) add(I[j].p,1),++j;
ans[I[i].id]+=query(n)-query(I[i].p);
}
for(int i=l;i<j;++i) add(I[i].p,-1);
sort(I+l,I+mid+1,[](const _& a,const _& b)->bool{
return a.p<b.p;
});
sort(I+mid+1,I+r+1,[](const _& a,const _& b)->bool{
return a.p<b.p;
});
j=l;
for(int i=mid+1;i<=r;++i){
while(j<=mid&&I[j].p<I[i].p) add(I[j].v,1),++j;
ans[I[i].id]+=query(n)-query(I[i].v);
}
for(int i=l;i<j;++i) add(I[i].v,-1);
return;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
cin>>n;;
for(int i=1;i<=n;++i) cin>>a[i],I[i]=_(i,a[i],i,0),mp[a[i]];
for(auto& i:mp) i.second=++tot;
for(int i=1;i<=n;++i) I[i].v=mp[I[i].v];
solve(1,n);
cout<<ans[0]<<'\n';
return 0;
}