其他分享
首页 > 其他分享> > 【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;
}

标签:maxx,出栈,进阶,1010100,int,YBTOJ,top2,top1,stack
来源: https://blog.csdn.net/liuziha/article/details/122829793