主要是栈的灵活使用。
#include <stdio.h>
#include <stack>
int target[1000+10] = {0};
int main()
{
int n;
while(scanf("%d", &n) == 1) {
if(n == 0)
break;
for(;;) {
scanf("%d", &target[0]);
if(target[0] == 0)
break;
int enNum = 1;
std::stack<int> s;
bool yes = true;
for(int i = 1; i < n; ++i)
scanf("%d", &target[i]);
for(int i = 0; i < n; ++i) {
if(!s.empty() && target[i] == s.top()) {
s.pop();
} else if( target[i] >= enNum) {
for(int j = enNum; j < target[i]; ++j)
s.push(j);
enNum = target[i] + 1;
} else {
yes = false;
break;
}
}
printf("%s\n", yes ? "Yes" : "No");
}
printf("\n");
}
}