**题目描述 **

给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列。

输入描述:

第一行一个数n 第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格。

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>

const int length=1e+6;
class mySolution{
public:
    void printResult(std::vector<int> nums){
        int maxValue[length]={0};
        for(int i=nums.size()-1;i>=0;i--){
            maxValue[i]=std::max(maxValue[i+1],nums[i]);
        }
        std::stack<int> stack;
        for(int i=0;i<nums.size();i++){
            stack.push(nums[i]);
            while(!stack.empty()&&stack.top()>maxValue[i+1]){
                std::cout<<stack.top()<<' ';
                stack.pop();
            }
        }
    }
};

int main(){
    mySolution*solution=new mySolution();
    std::vector<int> nums;
    int n=0;
    std::cin>>n;
    while(n--){
        int val;
        std::cin>>val;
        nums.push_back(val);
    }
    solution->printResult(nums);
    return 0;    
}