求条 arc b
查看原帖
求条 arc b
555065
ChrysanthBlossom楼主2024/8/25 22:01
#include<bits/stdc++.h>
#define ri register int
#define ll long long
using namespace std;
const int maxn=1e6+7;
const int mod=998244353;
int n,k;
int a[maxn],b[maxn];
int vis[maxn];
void solve(){
	cin>>n>>k;
	for(ri i=1;i<=n;i++)vis[i]=0;
	for(ri i=1;i<=n;i++)cin>>a[i];
	for(ri i=1;i<=n;i++)cin>>b[i];
	if(k==1){
		int tota=unique(a+1,a+1+n)-a-1;
		int totb=unique(b+1,b+1+n)-b-1;
		int cur=1;
		for(ri i=1;i<=totb;i++){
			while(cur<=tota&&a[cur]!=b[i])cur++;
			if(cur>tota){
				cout<<"No\n";
				return;
			}
			cur++;
		}
		cout<<"Yes\n";
		return;
	}
	for(ri i=1;i<=n;i++)vis[b[i]]=1;
	a[0]=0;a[n+1]=0;
	for(ri i=1;i<=n;i++){
		if(!vis[a[i]])a[i]=0;
	}
	for(ri i=1;i<=n;i++){
		if(!a[i]){
			if(a[i-1])a[i]=a[i-1];
		}
	}
	for(ri i=n;i;i--){
		if(!a[i]){
			if(a[i+1])a[i]=a[i+1];
		}
	}
	for(ri i=1;i<=n;i++)vis[i]=0;
	for(ri i=1;i<=n;i++)vis[a[i]]++;
	for(ri i=1;i<=n;i++){
		if(!vis[b[i]]){
			cout<<"No\n";
			return;
		}
	}
	bool r=0;
	for(ri i=1;i<=n;i++){
		if(vis[a[i]]>=2)r=1;
	}
	if(!r){
		for(ri i=1;i<=n;i++){
			if(a[i]!=b[i]){
				cout<<"No\n";
				return;
			}
		}
		cout<<"Yes\n";
		return;
	}
	cout<<"Yes\n";
}
signed main(){
	ios::sync_with_stdio(0);
	int T;cin>>T;
	while(T--)solve();
	return 0;
}
/*
2 1
1 2
*/
2024/8/25 22:01
加载中...