【YBTOJ进阶训练指导】出栈序列【模拟】【贪心】

【YBTOJ进阶训练指导】出栈序列【模拟】【贪心】

思路:

字典序最大,所以直接贪心每次出栈的是最大

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;
}
上一篇:去除k个元素后的最大值/最小值——类单调栈


下一篇:每日一道Leetcode——省份数量