题解:CF2021C1 Adjust The Presentation (Easy Version)

\(c_i\) 记录成员 \(i\) 最早需要展示幻灯片的位置,遍历每一个 \(i(i<n)\) 如果 \(c_{a_i}>c_{a_{i+1}}\),就不能实现。

考虑如何求 \(c\) 数组,初始设为 \(\infty\),从后往前遍历 \(b\) 数组,设当前位置为 \(i\),将 \(c_{b_i}\gets i\) 即可。

代码:

#include<bits/stdc++.h>
using namespace std;
void solve(){
	int n,m,q;
	cin>>n>>m>>q;
	vector<int> c(n+1,m+114514),a(n+1),b(m+1);
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) cin>>b[i];
	for(int i=m;i>=1;i--) c[b[i]]=i;
	for(int i=1;i<n;i++)
		if(c[a[i]]>c[a[i+1]]){
			cout<<"TIDAK\n";
			return;
		}
	cout<<"YA\n";
	
}
int main(){
	int T;
	cin>>T;
	while(T--){solve();}
}
posted @ 2024-10-16 10:13  cly312  阅读(30)  评论(0)    收藏  举报