Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 475(222 users)Total Accepted: 272(216 users)Rating: Special Judge: No
Description

给定一个从1开始的连续整数列1、2、3、4......n。

将上述数列按顺序入栈,中途栈顶元素可以出栈。

再给定一个出栈序列,判断此序列是否合法。


例如,将n设为4。即得到数列1、2、3、4。

再给定出栈序列1、3、4、2。

可以看出,此出栈序列合法。

过程如下,先将数列1、2、3、4中的元素1入栈,再将其出栈。

然后将元素2、3入栈,将元素3出栈。

最后将元素4入栈,再把栈内的仅余元素4、2出栈。


整个过程中,元素按照1、3、4、2的顺序出栈。证明其合法。

Input

输入包括多组测试用例。

对于每组测试用例,第一行包含一个整数n<100,代表从1开始的连续整数列长度。

第二行包含一个长度为n的数列,代表出栈序列。出栈序列的各元素在区间[1,n]内且不重复。

Output

若出栈序列合法,则输出Yes。

否则,输出No。

Sample Input

4

1 3 4 2

Sample Output

Yes

Hint

"Yes","No"注意大小写

 

首先要明确1-n个数 进栈的顺序是确定的,而出栈顺序不同,进栈过程中,当发现该出栈元素时,不得不让他出栈,然后判断此时栈顶元素是否和下一个该出栈

元素相同。那么理论上到最后栈应该为空才合法。

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	int n,gq[101];
	while(cin>>n)
	{
		stack<int>ls;
		for(int i=0;i<n;i++)
			cin>>gq[i];
		int t=0;
		for(int j=1;j<=n;j++)
		{
			ls.push(j);
			while(!ls.empty()&&ls.top()==gq[t])
			{
				ls.pop();
				t++;
			}
		}
		if(ls.empty())
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}


 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值