CF798E Mike and code of a permutation

题目描述

Mike 发现了一种新的排列编码方法。如果他有一个排列 $P=[p_{1},p_{2},...,p_{n}]$,他会按照以下方式对其进行编码: 记 $A=[a_{1},a_{2},...,a_{n}]$ 为长度为 $n$ 的序列,代表该排列的编码。对于每个 $i$ 从 $1$ 到 $n$ 依次: 他会选择最小的未被标记的 $j$($1 \le j \le n$),使得 $p_{i} < p_{j}$,并将 $a_{i}$ 赋值为 $j$(即执行 $a_{i}=j$),同时标记 $j$。如果没有这样的 $j$,则令 $a_{i}=-1$。 Mike 忘记了原始的排列,但还记得其编码。你的任务很简单:找出任意一个排列,使其编码与 Mike 原来的排列编码相同。 你可以假设一定存在至少一个有效的排列。

输入格式

第一行包含一个整数 $n$($1\le n\le 500000$),表示排列的长度。 第二行包含 $n$ 个以空格分隔的整数 $a_{1},a_{2},...,a_{n}$($1\le a_{i}\le n$ 或 $a_{i}=-1$),表示 Mike 的排列编码。 保证 $A$ 中所有正值都各不相同。

输出格式

仅一行,输出 $n$ 个数 $p_{1},p_{2},...,p_{n}$($1\le p_{i}\le n$),表示一个使编码相同的排列 $P$。注意,这个排列中的数字互不相同。

说明/提示

对于第一个样例中的排列示例解释如下: 当 $i=1$ 时,最小的 $j$ 是 $2$,因为 $p_{2}=6 > p_{1}=2$。 当 $i=2$ 时,没有 $j$ 满足条件,因为 $p_{2}=6$ 是排列中最大的元素。 当 $i=3$ 时,最小的 $j$ 是 $1$,因为 $p_{1}=2 > p_{3}=1$。 当 $i=4$ 时,最小的 $j$ 是 $5$($2$ 已被标记),因为 $p_{5}=5 > p_{4}=4$。 当 $i=5$ 时,没有 $j$,因为 $2$ 已被标记。 当 $i=6$ 时,最小的 $j$ 是 $4$,因为 $p_{4}=4 > p_{6}=3$。 由 ChatGPT 5 翻译