思路:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define fi first
#define se second
#define lson p << 1
#define rson p << 1 | 1
const int maxn = 1e6 + 5, inf = 1e9 + 5, maxm = 4e4 + 5, mod = 1e9 + 7, N = 1e6;
int a[maxn], p[maxn], b[maxn], p2[maxn];
int n, m;
string s;
bool vis[maxn];
int qpow(int a, int b){
int res = 1;
while(b){
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void solve(){
int res = 0;
cin >> n;
for(int i = 1; i <= n; i++){
vis[i] = 0;
p2[i] = 0;
p[i] = 0;
}
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i <= n; i++){
cin >> b[i];
p[b[i]] = i;
}
int cnt = 0;
int k = 1;
vector<pair<int, int>> vec;
for(int i = 1; i <= n; i++){
vector<pair<int, int>> path;
path.pb({a[i], b[i]});
int j = i;
int siz = 0;
while(!vis[j]){
vis[j] = 1;
siz++;
j = p[a[j]];
path.pb({a[j], b[j]});
}
if(siz == 1){
continue;
}
for(auto [x, y] : path){
if(!p2[x] && !p2[y]){
p2[x] = k;
p2[y] = n - k + 1;
res += 2LL * abs(p2[x] - p2[y]);
k++;
}
}
}
cout << res << '\n';
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// fac[0] = 1;
// for(int i = 1; i <= N; i++){
// fac[i] = fac[i - 1] * i % mod;
// }
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}