#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
const int maxn = 1010;
int a[maxn],b[maxn];
int n;
bool fun(){
stack<int>s;
int i,j;
for(i=1,j=1;i<=n;){
if(a[i]==b[j]){++i;++j;}
else if(!s.empty()&&a[i]==s.top()){++i;s.pop();}
else if(b[j]<=n){s.push(b[j]);++j;} //总结因为如果由b[j]<=n进行判断,则有可能b[n+1]或者b[n+2]等等的数被初始化为0,
//导致即使超出了 n 的范围仍然能满足条件,导致错误
else return false;
}return true;
}
int main()
{
// freopen("in.txt","r",stdin);
while(~scanf("%d",&n)&&n){
while(scanf("%d",&a[1])&&a[1]){
for(int i=1;i<=maxn;++i)b[i]=i;
for(int i=2;i<=n;++i)scanf("%d",&a[i]);
int ok = fun();
if(ok)printf("Yes\n");
else printf("No\n");
}
puts("");
}
return 0;
}
UVa 514 Rails
最新推荐文章于 2024-10-01 22:51:02 发布