/
本道题虽然没有单调性可言,但是
“子序列指序列的一部分项按原有次序排列而得的序列”
可以知道i和j都是从前向后遍历,并且j最多遍历一次即可。
/
include[HTML_REMOVED]
using namespace std;
int m,n;
const int N=1e5+10;
int a[N],b[N],sum[N]={0};
int main()
{
cin >> m >> n;
for(int i=0;i<m;i) scanf(“%d”,&a[i]);
for(int i=0;i<n;i) scanf(“%d”,&b[i]);
//定义全局变量,因为j最多只需要循环n次,所以每次循环的值继承上一个j即可
int j=0;
for(int i=0;i<m;i)
{
while(j<n&&a[i]!=b[j]) j;
//j<n是为了防止数组b指针越界
if(a[i]==b[j]&&j<n)
{
//只要a[i]这个数位上的数值满足题设,就在此标记
sum[i];
j;
}
}
for(int i=0;i<m;i++)
{
//有一个数位不满足。输出”No”,结束程序
if(sum[i]!=1)
{
cout << “No”;
return 0;
}
}
cout << “Yes”;
return 0;
}