#include<iostream>
#include<cstring>
using namespace std;
const int N = 1000010;
int w[N],tr[N],sum[N];
int n;

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

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

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

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++) {
        scanf("%d",&w[i]);
        w[i]++;
    }
    
    for(int i=0;i<n;i++){
        sum[i] = query(N-1)-query(w[i]);
        add(w[i],1);
    }
    memset(tr,0,sizeof tr);
    
    for(int i=n-1;i>=0;i--){
        sum[i] += query(w[i]-1);
        add(w[i],1);
    }
    
    long long res = 0;
    for(int i=0;i<n;i++) res += (long long)sum[i]*(sum[i]+1)/2;
    
    printf("%lld",res);
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐