rt,谢谢大佬们。
#include <iostream>
#include <cstring>
#define int long long
using namespace std;
int T, n, x;
int ans, tot = 1;
int a[1600000], ls[1600000], rs[1600000];
void add (int l, int r, int k) {
++ a[k];
if (l == r) return;
int mid = l + r >> 1;
if (x <= mid) {
if (! ls[k]) ls[k] = ++ tot;
add (l, mid, ls[k]);
}
else {
if (! rs[k]) rs[k] = ++ tot;
add (mid + 1, r, rs[k]);
}
}
int query (int y, int l, int r, int k) {
if (y >= r) return a[k];
int mid = l + r >> 1, res = query (y, l, mid, ls[k]);
if (y > mid) {
if (!rs[k]) rs[k] = ++ tot;
res += query (y, mid + 1, r, rs[k]);
}
return res;
}
signed main () {
scanf ("%lld", &T);
while (T --) {
tot = 1;
ans = 0;
memset (a, 0, sizeof a);
memset (ls, 0, sizeof ls);
memset (rs, 0, sizeof rs);
scanf ("%lld", &n);
for (int i = 1; i <= n; i ++) {
scanf ("%lld", &x);
ans += a[1] - query (x, -1000000000, 1000000000, 1);
add (-100000000, 1000000000, 1);
}
printf ("%lld\n", ans);
}
return 0;
}