给你一个1->n的排列和一个栈,入栈顺序给定
你要在不打乱入栈顺序的情况下,对数组进行从大到小排序
当无法完全排序时,请输出字典序最大的出栈序列
输入
第一行一个数n
第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格
输出
输出一行n个数表示答案,用空格隔开,结尾无空格
Input
5
2 1 5 3 4
Output
5 4 3 1 2
说明:2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int n;
int a[N];
int maxn[N];
stack <int> q;
signed main()
{ios;cin>>n;for (int i=1;i<=n;i++) cin>>a[i];for (int i=n;i>=1;i--) maxn[i]=max(maxn[i+1],a[i]); //后缀最大值,找到从当前位置开始到最后的最大值for (int i=1;i<=n;i++){q.push(a[i]);while (q.size()&&q.top()>maxn[i+1]) //当栈不空 且 栈顶元素>后缀最大值 时,{ //说明此时栈顶元素最大,将最大值弹出cout<<q.top()<<" "; //到最后时,maxn[n+1]为0,也就是清空栈q.pop();}}return 0;
}