C : 最小的排列

Progress Bar

时间限制:1 Sec 内存限制:256 MiB

提交


题目描述

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

对二元组<i,A[i]>按照如下规则排序:

<i,A[i]>小于<j,A[j]>当且仅当A[i]<A[j]或A[i]=A[j]且i<j。

将排序后的二元组的第一个元素按顺序排列得到排列Q。

现在,因为Reverie的粗心,她丢失了原排列P,你能根据排列Q还原排列P么?

如果有多个符合要求的排列P,输出字典序最小的那一个。

输入描述

第一行输入一个整数n表示排列的长度。

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

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

$1≤n≤10^5$

输出描述

输出一行一个长度为n的排列,表示字典序最小的满足条件的排列P,以空格分割。

样例输入

5
5 3 4 1 2

样例输出

3 4 2 5 1

提示

样例解释
P:3 4 2 5 1
A:3 3 2 2 1
Q:5 3 4 1 2

来源

Wannacry-02