class Solution {
public:
/**
* 栈排序
* @param a int整型一维数组 描述入栈顺序
* @param aLen int a数组长度
* @return int整型vector
*/
vector<int> solve(int* a, int n) {
// write code here
stack<int> stk;
vector<int> res;
vector<int> vis(n + 1, false); //将已入栈的较大元素标记
int now = n; //当前应当出栈对元素,n一定是第一个出栈的元素
for(int i = 0; i < n; i ++){
stk.push(a[i]);
vis[a[i]] = true;
while(now > 0 && vis[now]) now --; //应当出栈的为>=n的元素
while(!stk.empty() && stk.top() >= now){
res.push_back(stk.top()); stk.pop();
}
}
while(!stk.empty()){
res.push_back(stk.top()); stk.pop();
}
return res;
}
};