C1662 [Wannafly冬令营2018Day3]排列

内存限制:256 MB 时间限制:1000 ms

题目描述

说出来你可能不信,这场比赛居然有签到题。

定义长度为 $n$ 的排列 $p$ 的前缀最小值数组为一个长度为 $n$ 的数组 $A(p)$,其中 $A(p)[i] = min \ p[j] (1 \leq j \leq i)$。

可怜定义排列 $p$ 的长度为 $i$ 的前缀小于长度为 $j$ 的前缀当且仅当 $A(p)_i < A(p)_j$ 或者 $A(p)_i = A(p)_j$ 且 $i < j$。利用这个小于关系,可怜求得了另一个长度为 $n$ 的排列 $q$,其中 $q_i$ 表示排列 $p$ 第 $i$ 小的前缀的长度。

可怜是个粗心的女孩子,因为一些机缘巧合,可怜丢失了排列 $p$。于是可怜希望能够通过排列 $q$ 来还原出排列 $p$。满足条件的排列 $p$ 可能有很多,可怜希望你能求出它们中字典序最小的那个。

长度为 $n$ 的排列 $x$ 在字典序上小于长度为 $n$ 的排列 $y$ 当且仅当存在下标 $i \in [1,n]$ 满足 $x_i < y_i$ 且对更小的下标 $j \in [1,i)$,都有 $x_i=y_i$。

输入格式

第一行输入一个整数 $n(1 \leq n \leq 10^5)$,表示排列的长度。

第二行输入一个长度为 $n$ 的排列 $q$。

输入保证存在至少一个满足条件的排列 $p$。

输出

输出一行一个长度为 $n$ 的排列,表示字典序最小的满足条件的排列 $p$。

样例

样例输入 1

5 5 3 4 1 2

样例输出 1

3 4 2 5 1

提示