树状数组
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
const int maxn1=100000;
const int maxn2=20010;
int c[maxn1+10],v[maxn2],l[maxn2],r[maxn2];
int n;
int lowbit(int x)
{
return x&(-x);
}
void add(int x)
{
while(x<=maxn1)//要细心
{
c[x]+=1;
x+=lowbit(x);
}
}
int sum(int x)
{
int tot=0;
while(x>0)
{
tot+=c[x];
x-=lowbit(x);
}
return tot;
}
int main()
{
int t;
cin>>t;
while(t--)
{
scanf("%d",&n);
int i,a;
for(i=1;i<=n;i++) scanf("%d",&v[i]);
memset(c,0,sizeof(c));
for(i=1;i<=n;i++)
{
add(v[i]);
l[i]=sum(v[i]-1);
}
memset(c,0,sizeof(c));
for(i=n;i>0;i--)
{
add(v[i]);
r[i]=sum(v[i]-1);
}
long long tot=0;
for(i=1;i<=n;i++)
{
tot+=l[i]*(n-i-r[i])+(i-1-l[i])*r[i];
}
printf("%I64d\n",tot);
}
return 0;
}