题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n≤100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 Yes
,否则输出 No
。为了防止骗分,每个测试点有多组数据。
输入格式
第一行一个整数 q,询问次数。
接下来 q 个询问,对于每个询问:
第一行一个整数 n 表示序列长度;
第二行 n个整数表示入栈序列;
第二行 n个整数表示出栈序列;
输出格式
对于每个询问输出答案。
题解:
通过简单地阅读题目可知,题意为对于给定的入栈序列 pushed验证序列poped是否为入栈序列可能的一个出栈序列。
由于数据范围比较小(n≤100000)不会爆栈,可以用STL!
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
stack<int>q;
int p,n;
int a[N],b[N];//a为入栈序列,b为出栈序列
int main()
{
scanf("%d",&p);
while(p--)
{
scanf("%d",&n);
int cnt=1;//计数器
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i&