//5_2_1: Rails PopPush城火车站出入组合问题 POJ1363 ZOJ1259
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1000 + 10;
int main()
{
int i,x,N,max,cnt,valid,p[maxn];
cin >> N;
while(N)
{
cin >> x;
max = cnt = 0; //max表示栈里面的和已经出栈的序号最大值
valid = 1;
memset(p,0,sizeof(p)); //p为0表示没有出栈,p为1表示在栈中,p为2表示已经出栈
while(x)
{
if(valid == 1)
{
for(i = x + 1;i <= max;i ++)
if(p[i] == 1)
{
valid = 0;
break;
}
if(valid == 1)
{
max = max > x ? max : x;
p[x] = 2; //表示已经出栈了
for(i = 1;i < x;i ++)
if(p[i] == 0)
p[i] = 1;
}
}
if(++cnt == N)
{
printf("%s\n",valid == 1 ? "Yes" : "No");
cin >> x;
max = cnt = 0; //max表示栈里面的和已经出栈的序号最大值
valid = 1;
memset(p,0,sizeof(p)); //p为0表示没有出栈,p为1表示在栈中,p为2表示已经出栈
continue;
}
cin >> x;
}
if(x == 0)
{
printf("\n");
cin >> N;
}
}
return 0;
}
/*测试结果:通过POJ1363 ZOJ1259检测
4
1 2 3 4
Yes
1 2 4 3
Yes
1 3 2 4
Yes
1 3 4 2
Yes
1 4 2 3
No
1 4 3 2
Yes
2 1 3 4
Yes
2 1 4 3
Yes
2 3 1 4
Yes
2 3 4 1
Yes
2 4 1 3
No
2 4 3 1
Yes
3 1 2 4
No
3 1 4 2
No
3 2 1 4
Yes
3 2 4 1
Yes
3 4 1 2
No
3 4 2 1
Yes
4 1 2 3
No
4 1 3 2
No
4 2 1 3
No
4 2 3 1
No
4 3 1 2
No
4 3 2 1
Yes
0
0
请按任意键继续. . .
*/