luogu#P11396. 排队

排队

题目描述

第一届喵喵喵编程大赛即将开始,本次比赛有 nn 只喵喵参赛,编号依次为 1,2,,n1,2,\ldots, n,已经分成了若干组,每一组喵喵的编号都是连续的一段。

根据报名情况,你已经知道第 ii 只喵喵会第 pip_i 个到达现场,保证 pip_i 构成 1n1\sim n 的排列。

一组喵喵的到达时间被定义为这一组喵喵中最早到达的喵喵的到达时间。

喵喵的排队规则如下:

  • 先把所有的喵喵组按每组喵喵的到达时间从小到大排序。
  • 然后对于同一组喵喵,按照每只喵喵的到达时间从小到大排序。

按照这个排队规则,可以得到一个新的排列 q1,,qnq_1,\ldots,q_n,其中 qiq_i 表示从前往后第 ii 只喵喵的到达时间

你已经知道了所有 pip_i,但是不清楚喵喵的分组,你想知道排列 q1,q2,,qnq_1,q_2,\ldots,q_n 的字典序最大可能是什么。

输入格式

输入的第一行有一个正整数 nn,表示喵喵数量。

第二行有 nn 个正整数 p1,p2,,pnp_1,p_2,\ldots,p_n,表示每只喵喵的到达顺序。

输出格式

输出一行 nn 个正整数,表示 qq 的字典序最大可能。

4
2 1 4 3

1 4 2 3

6
6 5 4 3 2 1

1 2 3 4 5 6

提示

【样例 1 解释】

所有可能的分组情况有 88 种可能,下面分别列出:

分组情况 最终排列 qq
(2)(1)(4)(3)(2)(1)(4)(3) 1,2,3,41,2,3,4
(2)(1)(4,3)(2)(1)(4,3)
(2)(1,4)(3)(2)(1,4)(3) 1,4,2,31,4,2,3
(2)(1,4,3)(2)(1,4,3) 1,3,4,21,3,4,2
(2,1)(4)(3)(2,1)(4)(3) 1,2,3,41,2,3,4
(2,1)(4,3)(2,1)(4,3)
(2,1,4)(3)(2,1,4)(3) 1,2,4,31,2,4,3
(2,1,4,3)(2,1,4,3) 1,2,3,41,2,3,4

关于表格,我们以 (2)(1,4,3)(2)(1,4,3) 这个分组方式为例,演示排队结果的计算:

  • 首先 (2)(2) 这组喵喵的到达时间为第 22(1,4,3)(1,4,3) 这组喵喵的到达时间为第 11,从而 (1,4,3)(1,4,3) 排在前面。
  • 然后 (1,4,3)(1,4,3) 这组喵喵内部按照到达时间排序,得到 1,3,41,3,4(2)(2) 这组喵喵内部按照到达时间排序得到 22
  • 最后把每组喵喵的排序结果拼起来,得到 1,3,4,21,3,4,2

【样例 2 解释】

读者不难验证,无论喵喵怎么分组,因为无论组内还是组外都是从小到大排序的,所以 qiq_i 永远是 1,2,3,4,5,61,2,3,4,5,6

【数据范围】

对于全体数据,保证 1n3×1051\le n\le 3\times 10^5,且 pip_i 构成 1n1\sim n 的一个排列。

子任务编号 nn\le 特殊性质 分值
1 33 11
2 1616 16
3 20002000 22
4 3×1053\times 10^5 A 17
5 34
  • 特殊性质 A:存在 1kn1\le k\le n 使得 $p_1>p_2>\ldots >p_{k-1}> p_k < p_{k+1}<\ldots < p_n$。例如,样例 2 就是 k=6k=6 的情形。