Codeforces Round #743 (Div. 2) B. Swaps

传送门

思路:

遍历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;
	} 
}

おすすめ

転載: blog.csdn.net/p15008340649/article/details/120396466