大白上的题目
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
#define MAXN 100010
#define MAXD 20010
int num[MAXN];
int val[MAXD],lmin[MAXD],rmin[MAXD];
int lowbit(int x) {return x & (-x);}
int sum(int x)
{
int ret = 0;
while (x > 0)
{
ret += num[x];
x -= lowbit(x);
}
return ret;
}
void add(int x,int d)
{
while (x <= MAXN)
{
num[x] += d;
x += lowbit(x);
}
}
int main()
{
int T,n;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
memset(num,0,sizeof(num));
for (int i = 1; i <= n ; i++)
{
scanf("%d",&val[i]);
add(val[i],1);
lmin[i] = sum(val[i] - 1);
}
memset(num,0,sizeof(num));
for (int i = n ; i >= 1 ; i--)
{
add(val[i],1);
rmin[i] = sum(val[i] - 1);
}
LL ans = 0;
for (int i = 1; i <= n ; i++)
ans += lmin[i] * (n - i - rmin[i]) + (i - lmin[i] - 1) * rmin[i];
printf("%lld\n",ans);
}
return 0;
}