#题目链接:https://ac.nowcoder.com/acm/problem/14326

#题目描述:

输入正整数数字串,判断能否将一个顺序数字串通过入栈出栈操作得到该数字串。

输入:首先输入数据长度n,则之后的数据均为包含从1到n的所有数字的顺序随机的数字串。若输入一个元素仅为0的空串,则本次输入结束,重新设置数字串长度,若长度为0,则程序结束。

输出:在每次输入数字串后,判断能否将一个顺序数字串通过入栈出栈操作得到该数字串,可以的话输出"Yes",不可以则输出"No"。如果是空串则输出换行。

#代码实现

using namespace std;

long long a[1000010], b[1000010];

int main(void)
{
    int n;
    cin >> n;
    while (n)
    {
        int flag = n;
        while (flag)
        {
            for (int i = 1; i <= flag; i++)
            {
                cin >> a[i];
                if (a[i] == 0)
                {
                    flag = 0;
                    cout << endl;
                    break;
                }
            }
            if (!flag)
                break;
            stack<long long> st;
            for (int i = 1, j = 1; i <= flag; i++)
            {
                st.push(i);
                while (!st.empty() && st.top() == a[j])
                {
                    // printf("flag = %d, st.top = %lld, a[%d] = %lld\n", flag, st.top(), j, a[j]);
                    st.pop();
                    j++;
                }
            }
            if (st.empty())
                cout << "Yes\n";
            else
                cout << "No\n";
        }
        cin >> flag;
        n = flag;
    }
}