栈的排序
题目描述
给你一个1到n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列
输入格式
第一行一个数n
第二行n个数,表示入栈的顺序
输出格式
输出一行n个数表示答案
输入输出样例
输入 #1
5 2 1 5 3 4
输出 #1
5 4 3 1 2
说明/提示
1<=n<=100000
代码
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
int main(){
int n;
cin >> n;
stack<int> s;
for(int i=1; i<=n; i++){
cin >> a[i];
}
for(int i=n; i>=1; i--){
b[i]=max(a[i],b[i+1]);
}
for(int i=1; i<=n; i++){
while(s.size()&&s.top()>b[i]){
cout << s.top() << " ";
s.pop();
}
s.push(a[i]);
}
while(s.size()){
cout << s.top() << " ";
s.pop();
}
return 0;
}