class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 栈排序
     * @param a int整型vector 描述入栈顺序
     * @return int整型vector
     */
    vector<int> solve(vector<int>& a) {
        int n = a.size();
        vector<bool> mp(n + 5, false);
        vector<int> ret;
        stack<int> st;
        for(auto i : a)
        {
            mp[i] = true;
            st.push(i);
            while(mp[n]) n--;
            while(!st.empty() && st.top() > n)
            {
                ret.push_back(st.top());
                st.pop();
            }
        }

        return ret;
    }
};