思路:
遍历b数组,找到a数组中小于 b i b_i bi的下标最小的数。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<math.h>
#include<vector>
using namespace std;
#define ll long long
int a[100010],b[100010];
int vis[200010];
int ans[200010];
int main()
{
int t;
cin>>t;
while(t--)
{
memset(vis,0,sizeof(vis));
memset(ans,0,sizeof(ans));
int n;
cin>>n;
for(int i = 1; i <= n; i++)cin>>a[i],vis[a[i]] = i;
for(int i = 1; i <= n; i++)cin>>b[i];
int minn = 0x3f3f3f3f;
for(int i = 2; i <= 2*n; i += 2)
{
if(vis[i-1] < minn)
{
minn = vis[i-1];
}
ans[i] = minn;
}
int res = 0x3f3f3f3f;
for(int i = 1; i <= n; i++)
{
res = min(ans[b[i]]-1+i-1,res);
}
cout<<res<<endl;
}
}