pts 18 求调
查看原帖
pts 18 求调
1229671
Greenqwq楼主2024/5/18 18:09
//这个直接用树状数组维护,因为楼兰图腾也是这种做法

//采用计数型树状数组

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>

#define int long long

using namespace std;

const int N = 3e5+10;

int tr[N*2];
int n,w[N];
int l[N],r[N],idx;
map<int,int>S;

int get(int x){
    if(!S.count(x))S[x]=++idx;
    return S[x];
    // return x;
}

int lowbit(int x){
    return x&-x;
}

void add(int x,int c){
    for(int i=x;i<=n;i+=lowbit(i))tr[i]+=c;
}

int sum(int x){
    int ans=0;
    for(int i=x;i;i-=lowbit(i))ans+=tr[i];
    return ans;
}

signed main(){
    cin>>n;
    
    for(int i=1;i<=n;i++)cin>>w[i];
    
    // sort(w+1,w+1+n);
    
    //枚举左边比它大的
    for(int i=1;i<=n;i++){
        l[i]=sum(get(w[i])-1);
        add(get(w[i]),1);
        
        
    }
    
    memset(tr,0,sizeof tr);
    
    for(int i=n;i>=1;i--){
        r[i]=sum(get(n))-sum(get(w[i]));
        add(get(w[i]),1);
    }
    
    int ans=0;
    
    for(int i=2;i<n;i++){
        ans+=l[i]*r[i];
    }
    
    cout<<ans;
    
    return 0;
}
2024/5/18 18:09
加载中...