题目描述
已知自然数1,2,…,N(1<=N<=100)依次入栈,请问序列C1,C2,…,CN是否为合法的出栈序列。
输入
输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。
输出
对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
样例输入
5
3 4 2 1 5
5
3 5 1 4 2
0
样例输出
Yes
No
#include<iostream>
#include<stack>
using namespace std;
stack<int>a;
int main()
{
int n;
while(cin>>n&&n)
{
int num,tip=1,flag=0;
while(!a.empty()) a.pop();//初始化
for(int i=1;i<=n;i++)
{
cin>>num;
if(flag) continue; //如果已经不合法就无须判断
if(num>=tip) //如果出栈元素>=已栈中元素的最大值, 就顺序入栈
{
for(int j=tip;j<num;j++)//它本身是出栈元素,所以无需入栈
a.push(j);
tip=