#include <stdio.h> int top; int Stack(int stack[], int a, int &pre) { if (a <= pre) { if (stack[--top] != a) { //printf("%d %d\n", stack[top],a); return 0; } else return 1; } for (int i = pre + 1; i <= a; i++) { stack[top++] = i; } top--; pre = a; return 1; } int main(int argc, char *argv[]) { int n; int a, stack[105]; while (scanf("%d", &n) != EOF) { if(n==0) break; top = 1; stack[0]=0; int pre = 0; int flag = 1; for (int i = 0; i < n; i++) { scanf("%d", &a); if (flag == 1) { flag = Stack(stack, a, pre); /*for (int j=1; j<top; j++ ) { printf("%d ",stack[j]); } printf("\n");*/ } } if (flag == 1) { printf("Yes\n"); }else printf("No\n"); } return 0; } /************************************************************** Problem: 2119 User: admin Language: C++ Result: Accepted Time:11 ms Memory:1144 kb ****************************************************************/