萌新刚学树状数组,求助各位大佬
查看原帖
萌新刚学树状数组,求助各位大佬
719611
__2304__楼主2024/7/27 18:09
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e4+5,MAXAI=1e5+5;
int t,n,a[MAXN],c[MAXN],d[MAXN],p[MAXAI];
int lb(int x){return x&(-x);}
int sum(int x){
    int s=0;
    while(x>0) s+=p[x],x-=lb(x);
    return s;
}
void add(int x,int d){while(x<=n) p[x]+=d,x+=lb(x);}
int main(){
    cin>>t;
    while(t--){
        cin>>n;
        int ans=0;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int i=1;i<=n;i++){
            add(a[i],1);
            c[i]=sum(a[i]-1);
        }
        memset(p,0,sizeof(p));
        for(int i=n;i>=1;i--){
            add(a[i],1);
            d[i]=sum(a[i]-1);
        }
        //for(int i=1;i<=n;i++) cout<<c[i]<<" "<<d[i]<<endl;
        for(int i=1;i<=n;i++) ans+=c[i]*(n-i-d[i])+d[i]*(i-c[i]-1);
        cout<<ans<<endl;
        memset(p,0,sizeof(p));
    }
#ifndef ONLINE_JUDGE
    system("pause");
#endif
    return 0;
}

样例和自己造的数据对但是WA了

2024/7/27 18:09
加载中...