请判断:指定的序列能否仅由 入栈 和 出栈 操作得到。
输入:
有若干组数据输入
每组数据中,第一行为两个个整数 n 和 m。n 表示需要依次从 1~n 入栈,m 表示这组数据有 m 个出栈序列需要判断,当 n=0 且 m=0 时停止。
接下来有行,每行表示一个出栈序列
输出:
对每一个出栈序列,如果能正常出栈,则输出 Yes,否则输出 No。
#include<iostream>
#include<stack>
using namespace std;
int n,m,a[10005];
stack<int>s;
int main()
{
int cnt=0,j;
bool flag;
while(cin>>n>>m)
{
if(!n&&!m)
break;
cnt++;
if(cnt>1)
cout<<endl;
while(m--)
{
flag=true,j=1;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
if(!flag)
continue;
for(;j<=a[i];j++)
s.push(j);
if(s.top()!=a[i])
{
flag=false;
continue;
}
s.pop();
}
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}