// 模拟
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n, k;
int num[N], ask[N];
int m[N];
int check() {
int hh = -1, tt = 0;
int k = 0, e = 0;
for (int i = 0; i < n; i ++ ) {
// 插入一个?
m[++hh] = num[e ++];
while(tt <= hh) {
// 检查是否有符合删除条件的
if(m[tt] == ask[k]){
tt ++;
k ++;
}
else if(m[hh] == ask[k]){
hh --;
k ++;
}
else {
break;
}
}
}
return hh < tt;
}
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i ++ ) cin >> num[i];
for (int i = 0; i < k; i ++ ) {
for (int i = 0; i < n; i ++ ) cin >> ask[i];
// hh能删除能插入;tt只能删除
int r = check();
if(r) cout << "yes" << endl;
else cout << "no" << endl;
}
return 0;
}
【Daily Code】一端进,两端出
最新推荐文章于 2024-11-01 17:00:11 发布
这篇文章介绍了如何使用C++编写一个函数,检查在一个动态数组中,给定一系列整数`ask`,是否可以在保持原始顺序的前提下,对数组进行操作,使得数组中的每个`ask[i]`都有一个连续的区间可以被删除。
摘要由CSDN通过智能技术生成