自己看
2026-08-20 10:42:57
发布于:广东
0阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll a[30010],t1[30010],t2[30010],c[120010];
struct node{
ll a,i;
}q[30010];
bool operator <(node a,node b){
return a.a<b.a;
}
ll lowbit(ll x){
return x&(-x);
}
void updata(ll x){
while(x<=n){
c[x]+=1;
x+=lowbit(x);
}
}
ll get(ll x){
ll ans=0;
while(x>0){
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int main(){
//freopen(".in",r,stdin);
//freopen(".out",w,stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
cin>>n;
for(ll i=1;i<=n;i++){
ll x;
cin>>x;
q[i]={x,i};
}
sort(q+1,q+1+n);
for(ll i=1;i<=n;i++){
if(q[i].a!=q[i-1].a||i==1){
a[q[i].i]=i;
}else{
a[q[i].i]=a[q[i-1].i];
}
}
for(ll i=1;i<=n;i++){
t1[i]=get(a[i]-1);
updata(a[i]);
}
memset(c,0,sizeof(c));
for(ll i=n;i>=1;i--){
t2[i]=get(n-a[i]);
updata(n-a[i]+1);
}
ll ans=0;
for(ll i=1;i<=n;i++){
ans+=t1[i]*t2[i];
}
cout<<ans<<endl;
//fclose(stdin);
//fclose(stdout);
return 0;
}
这里空空如也






有帮助,赞一个