题目描述
我们知道,一个入栈序列是{1,2,3}的合法出栈序列有{3,2,1},{1,2,3}等,而{3,1,2}是不合法的.现在冰语有一个长度为n的序列A(保证序列内数字唯一,且1<=A[i]<=n)。他想知道这个序列是不是入栈顺序{1,2,3,...n}的合法出栈序列,你能告诉他么?
输入
第一行为T,表示样例个数
每个样例第一行为n,第二行为n个数
1<=T<=1e4,3<=n<=100
输出
对于每个样例输出一行,合法输出"YES",反之输出"NO",
样例输入 复制
1
3
3 1 2
样例输出 复制
NO
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int m;
cin>>m;
int a[105];
stack<int>stack1;
stack<int>stack2;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int i=m;i>=1;i--)
stack1.push(a[i]);
for(int j=1;j<=m;j++)
{
stack2.push(j);
while(stack1.size()&&stack2.size()&&stack1.top()==stack2.top())
{
stack1.pop();
stack2.pop();
}
}
if(stack1.size())
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}