题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 n(n≤100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 Yes
,否则输出 No
。为了防止骗分,每个测试点有多组数据,不超过 5 组。
输入格式
第一行一个整数 q,询问次数。
接下来 q个询问,对于每个询问:
第一行一个整数 n 表示序列长度;
第二行 n个整数表示入栈序列;
第三行 n 个整数表示出栈序列;
输出格式
对于每个询问输出答案。
输入输出样例
输入 #1
2 5 1 2 3 4 5 5 4 3 2 1 4 1 2 3 4 2 4 1 3
输出 #1
Yes No
#include<bits/stdc++.h>
using namespace std;
int q,n,j=0,c[100001];
int top=0,a[100001],flag=1,b[100001];
int main(){
cin>>q;
for(int l=1;l<=q;l++){
top=0,j=0;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
for(int i=0;i<n;i++){
if(top!=0&&c[top]==b[i]){
top--;
}
else{
c[++top]=a[j++];
while(c[top]!=b[i]&&j<=n) c[++top]=a[j++];
if(c[top]==b[i]) top--;
else break;
}
}
if(top==0)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}