编辑代码

#include<iostream>
#include<stack>
using namespace std;
int In[200];//顺序常数组
int Out[200];//输入组
bool Step[400];     //保存进出stack顺序
int count=0;
bool Check(int n)
{
    stack<int> S;//顺序常数组的栈
    stack<int> T;//输入组的栈
    for(int i=n-1;i>=0;i--)//从尾到头入/输入组的栈
        T.push(Out[i]);
    for(int i=0;i<n;i++)
    {
        S.push(In[i]);//从头到尾入顺序常数组的栈
        Step[count++]=0;
        while(!S.empty()&&!T.empty()&&S.top()==T.top())//
        {
            Step[count++]=1;
            S.pop();
            T.pop();
        }
    }
    return S.empty();
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        In[i]=i+1;
    for(int i=0;i<n;i++)
        cin>>Out[i];

    bool res=Check(n);
    cout<<(res?"empty":"NOT empty")<<endl;
    cout<<("\n")<<endl;
    if(res)
        for(int i=0;i<count;i++)
            cout<<(Step[i]?"OUT":"IN")<<endl;
    return 0;
}