#include <iostream>
#include <vector>
using namespace std;
vector<int> a;
vector<int> c;
void merge(int low, int high, int mid);
void mergesort(int low, int high)
{
int mid;
if (low < high)
{
mid=(low+high)/2;
mergesort(low,mid);
mergesort(mid+1,high);
merge(low,high,mid);
}
return ;
}
long long count ; //to store the inversion count
void merge(int low, int high, int mid)
{
int i, j, k;
i = low;
k = low;
j = mid + 1;
// standard merging from merge sort
while (i <= mid && j <= high)
{
if (a[i] < a[j])
{
c[k] = a[i];
k++;
i++;
}
else
{
c[k] = a[j];
k++;
j++;
// cout<<a[i]<<" "<<mid<<" "<<i<<"\n";
count += (long long)mid - (long long) i + 1L; // This is where the trick occurs, if X > Y,
//eg. in [3, 4, 5] and [1,2]
//if(3>1) then 4,5 is obviously greater then 1, thus making count as mid - i+1
}
}
while (i <= mid)
{
c[k] = a[i];
k++;
i++;
}
while (j <= high)
{
c[k] = a[j];
k++;
j++;
}
for (i = low; i < k; i++)
{
a[i] = c[i];
}
}
int main()
{
//int a[20], i, b[20];
int T;
cin>>T;
while(T--){
//cout<<"enter the elements\n";
int N;
cin>>N;
count =0;
a.clear(); a.resize(N);
c.clear(); c.resize(N);
for (int i = 0; i < N; i++)
{
cin>>a[i];
}
mergesort(0, N-1);
cout<<count<<"\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGludD4gYTsKdmVjdG9yPGludD4gYzsKdm9pZCBtZXJnZShpbnQgbG93LCBpbnQgaGlnaCwgaW50IG1pZCk7CnZvaWQgbWVyZ2Vzb3J0KGludCBsb3csIGludCBoaWdoKQp7CiBpbnQgbWlkOwogaWYgKGxvdyA8IGhpZ2gpCiB7CiAgICAgbWlkPShsb3craGlnaCkvMjsKICAgICBtZXJnZXNvcnQobG93LG1pZCk7CiAgICAgbWVyZ2Vzb3J0KG1pZCsxLGhpZ2gpOwogICAgIG1lcmdlKGxvdyxoaWdoLG1pZCk7CiB9CnJldHVybiA7Cn0KCmxvbmcgbG9uZyBjb3VudCA7IC8vdG8gc3RvcmUgdGhlIGludmVyc2lvbiBjb3VudAp2b2lkIG1lcmdlKGludCBsb3csIGludCBoaWdoLCBpbnQgbWlkKQp7CmludCBpLCBqLCBrOwppID0gbG93OwprID0gbG93OwpqID0gbWlkICsgMTsKLy8gc3RhbmRhcmQgbWVyZ2luZyBmcm9tIG1lcmdlIHNvcnQKd2hpbGUgKGkgPD0gbWlkICYmIGogPD0gaGlnaCkKewogICAgaWYgKGFbaV0gPCBhW2pdKQogICAgewogICAgICAgIGNba10gPSBhW2ldOwogICAgICAgIGsrKzsKICAgICAgICBpKys7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY1trXSA9IGFbal07CiAgICAgICAgaysrOwogICAgICAgICBqKys7CiAgICAgIC8vICAgY291dDw8YVtpXTw8IiAiPDxtaWQ8PCIgIjw8aTw8IlxuIjsKICAgICAgICAgY291bnQgKz0gKGxvbmcgbG9uZyltaWQgLSAobG9uZyBsb25nKSBpICsgMUw7IC8vIFRoaXMgaXMgd2hlcmUgdGhlIHRyaWNrIG9jY3VycywgaWYgWCA+IFksCiAgICAgICAgIC8vZWcuIGluIFszLCA0LCA1XSBhbmQgWzEsMl0KICAgICAgICAgLy9pZigzPjEpIHRoZW4gNCw1IGlzIG9idmlvdXNseSBncmVhdGVyIHRoZW4gMSwgdGh1cyBtYWtpbmcgY291bnQgYXMgbWlkIC0gaSsxICAgICAgICAgICAgICAKICAgICB9CiB9CndoaWxlIChpIDw9IG1pZCkKewogICAgY1trXSA9IGFbaV07CiAgICBrKys7CiAgICBpKys7Cn0Kd2hpbGUgKGogPD0gaGlnaCkKewogICAgY1trXSA9IGFbal07CiAgICBrKys7CiAgICBqKys7Cn0KZm9yIChpID0gbG93OyBpIDwgazsgaSsrKQp7CiAgICBhW2ldID0gY1tpXTsKIH0KfQppbnQgbWFpbigpCnsKLy9pbnQgYVsyMF0sIGksIGJbMjBdOwppbnQgVDsKY2luPj5UOwp3aGlsZShULS0pewogICAgLy9jb3V0PDwiZW50ZXIgIHRoZSBlbGVtZW50c1xuIjsKICAgIGludCBOOwogICAgY2luPj5OOwogICAgY291bnQgPTA7CiAgICBhLmNsZWFyKCk7IGEucmVzaXplKE4pOwogICAgYy5jbGVhcigpOyBjLnJlc2l6ZShOKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQogICAgewogICAgICAgIGNpbj4+YVtpXTsKICAgIH0KICAgIG1lcmdlc29ydCgwLCBOLTEpOwoKICAgIGNvdXQ8PGNvdW50PDwiXG4iOwp9Cn0=