瓜瓜的字符串(hard)
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

本题与 easy 唯一的区别是,不限制序列中的重复数字的出现。

瓜瓜在学字符串,他觉得喜欢字典序大的东西总是好的。某天他得到了一个长度为 n 的序列 ,并希望增大它的字典序,但是他懒得思考,就把这个任务丢给了你。

你可以先把该序列划分成若干不相交的区间,然后翻转每个划分出的区间。

瓜瓜想知道,如何使用一次操作才能使结果的字典序尽可能大。

字典序:对于两个长为 n 的序列 ,我们称 的字典序比 的字典序大,当且仅当存在 使得 成立,且

输入描述:

第一行有一个正整数 ,表示序列的大小。

接下来有 n 行,每行有一个正整数 a_i,其中

输出描述:

输出 n 个数字, 表示翻转之后字典序最大的序列。
示例1

输入

复制
5
2 3 2 3 1

输出

复制
3 2 3 2 1
示例2

输入

复制
5
2 3 1 2 3

输出

复制
3 2 3 2 1