#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define max(a, b) (a < b ? b : a)
#define min(a, b) ((a > b) ? b : a)
#define TEXT freopen("azerah.in","r",stdin); freopen("azerah.out","w",stdout);
#define mod 1000000007
#define pii pair<int,int>
#define F first
#define S second
#define testcase int TT; cin >> TT; for (int tc = 1; tc <= TT; tc++)
#define POL(i,n) for (int i = 0 ; i < n ; ++i)
#define pb push_back
#define all(x) x.begin(),x.end()
//#define endl "\n"
typedef pair<int,int>PL;
//const long long N=1e6+7;
//vector<bool>pre(N,0);
//vector<ll>hp(N,0);
//vector<ll>v;
//ll f=0;
//vector<ll>mak(N,0);
//
//void precomp()
//{
// pre[0]=pre[1]=false;
//
// for(ll i=2; i<N; i++)
// {
// if(pre[i]==false)
// {
// v.pb(i);
// f++;
// hp[i]=i;
// for(ll j=2*i; j<N; j+=i)
// {
// pre[j]=true;
// hp[j]=i;
// }
// }
// }
//
// ll sum=1,j=1,val=1;
// while(val<=N)
// {
// mak[val]=j;
// j++;
// sum*=2;
// val+=sum;
// }
//
//}
//ll binpow(ll a,ll b)
//{
// ll ans=1;
//
// while(b>0)
// {
// if(b&1)
// {
// ans=(ans*a);
// }
//
// a=(a*a);
// b>>=1;
// }
// return ans;
//}
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T, typename R> using ordered_map = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void solve()
{
int n,x;
cin >> n;
int a[n+5],mnl[n+5],mxl[n+5],mnr[n+5],mxr[n+5];
ordered_set<int>s1,s2;
for(int i=1;i<=n;i++)
{
cin >> a[i];
mnl[i]=s1.order_of_key(a[i]);
mxl[i]=(s1.size()-s1.order_of_key(a[i]+1));
s1.insert(a[i]);
}
for(int i=n;i>=1;i--)
{
mnr[i]=s2.order_of_key(a[i]);
mxr[i]=(s2.size()-s2.order_of_key(a[i]+1));
s2.insert(a[i]);
}
int q;
cin >> q;
while(q--)
{
cin >> x;
cout << (mnl[x]*mxr[x])+(mxl[x]*mnr[x]) << endl;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
//TEXT;
//precomp();
testcase
{
solve();
}
return 0;
}