题解: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();}
}

浙公网安备 33010602011771号