
Input
Output
Sample Input
5 1 2 3 4 5 5 4 1 2 3 0 6 6 5 4 3 2 1 0 0
Sample Output
Yes No Yes
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <stack>
#include <cmath>
#define N 1009
using namespace std;
int a[N];
int n;
int b[N];
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        while(scanf("%d",&a[0]),a[0])
        {
            for(int i=1;i<n;i++)
            scanf("%d",&a[i]);
            stack<int>q;
            int j=0;
            for(int i=1,k=0;i<=n&&k<n;i++,k++)
            {
                q.push(i);
                while(q.size() && q.top()==a[j])
                {
                    j++;
                    q.pop();
                }
            }
//            int j=0;
//            for(int i=1,k=0;i<=n&&k<n;i++,k++)
//            {
//                b[k]=i;
//                while(a[j]==b[k])
//                {
//                    k--;
//                    j++;
//                    if(k<0) break;
//                }
//
//            }
//
//            //cout<<"j="<<j<<endl;
            if(j==n)
            cout<<"Yes\n";
            else
            cout<<"No\n";
        }
        cout<<endl;
    }
    return 0;
}
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <stack>
#include <cmath>
#define N 1009
using namespace std;
int a[N];
int n;
int b[N];
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        while(scanf("%d",&a[0]),a[0])
        {
            for(int i=1;i<n;i++)
            scanf("%d",&a[i]);
            stack<int>q;
            int j=0;
//            for(int i=1,k=0;i<=n&&k<n;i++,k++)
//            {
//                q.push(i);
//                while(q.size() && q.top()==a[j])
//                {
//                    j++;
//                    q.pop();
//                }
//            }
            //int j=0;
            for(int i=1,k=0;i<=n&&k<n;i++,k++)
            {
                b[k]=i;
                while(a[j]==b[k])
                {
                    k--;
                    j++;
                    if(k<0) break;
                }
            }
//            //cout<<"j="<<j<<endl;
            if(j==n)
            cout<<"Yes\n";
            else
            cout<<"No\n";
        }
        cout<<endl;
    }
    return 0;
}
两种方式都可行。
原文:http://blog.csdn.net/wust_zjx/article/details/45034449