题目链接
题意
给你一个1->n的排列和一个栈,入栈顺序给定
在不打乱入栈顺序的情况下,对数组进行从大到小排序
当无法完全排序时,请输出字典序最大的出栈序列
思路
- maxa[i]表示aa[j]的最大值(i<=j<n),遍历一遍若当前值大于maxa[i+1]即可出栈
- 注意题目没给数据范围,建议1e7
参考代码
#include<bits/stdc++.h>
using namespace std;
int aa[1000010];
int maxa[1000010];
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>aa[i];
}
for(int i=n-1; i>=0; i--)
{
maxa[i]=aa[i];
maxa[i]=max(maxa[i],maxa[i+1]);
}
stack<int> st;
for(int i=0; i<n; i++)
{
st.push(aa[i]);
while(!st.empty()&&st.top()>maxa[i+1])
{
cout<<st.top()<<" ";
st.pop();
}
}
}