PAT7-9 One Way In, Two Ways Out
题目详情:
思路:
模拟双端队列,直接看代码即可
详细代码:
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define fi first
#define se second
#define pb push_back
#define db double
#define sc scanf
#define pf printf
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
int n, m;
int a[maxn], q[maxn];
int main() {
cin>>n>>m;
for(int i = 0; i < n; ++i) cin>>a[i];
while(m--) {
//使用数组模拟双端队列
int front = 1, rear = 0;
int flag = 0, index = 0;
//输入序列
for(int i = 0; i < n; ++i) {
int tmp = 0;
sc("%d", &tmp);
//将该元素之前的数全部插入到数组中(从尾巴插入)
for(; index < n; ++index) {
q[++rear] = a[index];
if(a[index] == tmp) break;
}
//如果该元素在尾巴,则rear--
if(tmp == q[rear] ) rear--;
//如果该元素在头部,则front++
else if(tmp == q[front]) front++;
//如果都不在就说明有问题
else flag = 1;
index++;
}
if(flag) puts("no");
else puts("yes");
}
}