是一个经典的栈题目 但是自己就是写不出来 还是代码实现能力太弱 题意什么的都明白 看了别人的实现觉得很巧妙。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
using namespace std;
int a[1010];
stack <int> S;
int main(){
int n;
while(scanf("%d",&n) == 1 && n){
while(scanf("%d",&a[1]) == 1 && a[1]){
for(int i=2; i<=n; i++)
scanf("%d",&a[i]);
int A = 1, B = 1;
int ok = 1;
while(B <= n){
if(A == a[B]){
A++;
B++;
}
else if(!S.empty() && S.top() == a[B]){
S.pop();
B++;
}
else if(A <= n)
S.push(A++);
else{
ok = 0;
break;
}
}
printf("%s\n",ok ? "Yes" : "No");
}
printf("\n");
}
return 0;
}