2531: 【普及/提高-】【P4387】验证栈序列
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:6
解决:4
题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出
Yes,否则输出 No。为了防止骗分,每个测试点有多组数据。输入
第一行一个整数 ,询问次数。
接下来 个询问,对于每个询问:
第一行一个整数 表示序列长度;
第二行 个整数表示入栈序列;
第三行 个整数表示出栈序列;
输出
对于每个询问输出答案。
样例输入 复制
2
5
1 2 3 4 5
5 4 3 2 1
4
1 2 3 4
2 4 1 3
样例输出 复制
Yes
No
提示
#include<bits/stdc++.h>
using namespace std;
stack<int> pushed;
queue<int> poped;
int q,n,a[100010],b;
int main(){
cin>>q;
while (q--) {
cin>>n;
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
for (int i=1;i<=n;i++)
scanf("%d",&b),poped.push(b);
for (int i=1;i<=n;i++) {
pushed.push(a[i]);
while (pushed.top()==poped.front()) {
pushed.pop();
poped.pop();
if (pushed.empty()) break;
}
}
if (pushed.empty()&&poped.empty())
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
while (!pushed.empty()) pushed.pop();
while (!poped.empty()) poped.pop();
}
return 0;
}