#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int num[maxn],n,a[maxn],c[maxn],d[maxn];
int lowbit(int x){
return x&(-x);
}
int sum(int x){
int ret=0;
while(x>0){
ret+=a[x];
x-=lowbit(x);
}
return ret;
}
void add(int x,int d){
while(x<=100010){
a[x]+=d;
x+=lowbit(x);
}
}
void init()
{
memset(c, 0, sizeof(c));
memset(d, 0, sizeof(d));
memset(a, 0, sizeof(a));
}
int main(){
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
scanf("%d",&num[i]);
add(num[i], 1);
c[i] = sum(num[i]-1);
}
memset(a, 0, sizeof(a));
for(int i = n; i >= 1; i--)
{
add(num[i], 1);
d[i] = sum(num[i]-1);
}
long long sum = 0;
for(int i = 1; i <= n; i++)
sum += c[i]*(n-i-d[i])+(i-c[i]-1)*d[i];
printf("%lld\n",sum);
}
return 0;
}
LA 4329 乒乓比赛(树状数组+计数原理)
猜你喜欢
转载自blog.csdn.net/weixin_43568895/article/details/103898986
今日推荐
周排行