TYWZOJ——#20026. [Senoir] Contest 19/8/13/2 - Problem B:排序

题目描述

众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能。常见的排序算法有冒泡排序、归并排序、快速排序、奇偶排序、猴子排序、梳排序、鸡尾酒排序、臭皮匠排序等。

在这里,介绍一种利用栈进行排序的方法。例如,当数组中的元素为 1, 3, 2 时,我们可以利用栈对其进行排序: 1 入栈; 3 入栈; 3 出栈; 2 入栈; 2 出栈; 1 出栈。在这个例子中,出栈序列是 3, 2, 1,因而实现了对数组的排序。

遗憾的是,在不打乱入栈顺序的前提下,有时仅仅借助一个栈是不能实现对数组的完全排序。

例如给定数组 2, 1, 3,借助一个栈,能获得的字典序最大的出栈序列是 3, 1, 2。(2 入栈; 1 入栈; 3 入栈; 3 出栈; 1 出栈; 2 出栈)

现请你借助一个栈,在不打乱入栈顺序的情况下,对数组进行从大到小排序。当无法完全排序时,请输出字典序最大的出栈序列。

输入格式

输入共 2 行。

第一行包含一个正整数 n,表示入栈序列长度。

第二行包含 n 个整数,表示入栈序列。输入数据保证给定的序列是 1 到 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出栈

数据范围与提示

对于 40% 的数据: N ≤ 10;

另有 20% 的数据: N ≤ 10³ ;

另有 20% 的数据: N ≤10⁵;

对于 100% 的数据: N ≤ 10⁶。

思路:

  栈排序,不一定像sort一样完全有序,只能尽量输出最大

  所以,我们用贪心策略;

  维护一个后缀最大值,然后每入栈到最大后缀的元素

  如果后缀值小于栈顶元素,则出栈(输出)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值