#include
using namespace std;

const int maxN=200000;
const int max=100000; //设定技能值最大为100000

int a[max],x,y,b[maxN];
int Lowbit(int x) //返回二进制最后一个1所表示的数

{ return x&(-x);}
void update (int x,int val) //向前更新

{while (x<=maxN)
{b[x]=b[x]+val;

x=x+Lowbit(x);
}

}
int sum(int x) //向右更新求和

{int sum=0;
while (x>0)

{ sum=sum+b[x];
x=x-Lowbit(x);

}
return sum;

}
int main()

{ int i,t,n;
long int m=0;

scanf("%d",&t);
while(t--)

{ scanf("%d",&n);
scanf("%d", &a[1]);

memset(b, 0, sizeof(b));//初始化树状组
scanf("%d", &a[1]);

for(i=1;i<=n;i++)

{scanf("%d",&a[i]);}
update(a[1], 1);

for(i=1;i<=n;i++)
{

scanf("%d", &a[i]);
update(a[i], 1);

x= sum(a[i] - 1);
}

scanf("%d", &a[n]);
memset(b, 0, sizeof(b)); ///注意这里要清空

update(a[n], 1);
for(i=n;i>0;i--)

{update(a[i], 1);
y=sum(a[i]-1);

}
for(i=2;i<=n;i++)

{m=m+x*(n-i-y)+y*(i-1-x);
}

printf("%lld\n",m);;
}

return 0;
}