思路:
字典序最大,所以直接贪心每次出栈的是最大
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int a[1010100], maxx[1010100], stack[1010100], ans[1010100], top1, top2;
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
for(int i=n; i>=1; i--)
maxx[i]=max(a[i], maxx[i+1]);
for(int i=1; i<=n; i++)
{
stack[++top1]=a[i];
while(stack[top1]>maxx[i+1])
ans[++top2]=stack[top1--];
}
while(top1)
ans[++top2]=stack[top1--];
for(int i=1; i<=top2; i++)
printf("%d ", ans[i]);
return 0;
}