#P1880. 构建哈希表

构建哈希表

题目描述

在一个简单的哈希表实现中,对于给定的哈希函数 f(x)=x%nf(x) = x \% n,有一长度为 nn 的数组用于存储 x0x \geq 0 的值。

当需要向哈希表插入一个值 xx 时,从数组的下标 f(x)f(x) 开始,向右循环移动,找到第一个未存储该数的位置,写入 xx。若哈希表已满或 xx 已存在于表中,则不再插入 xx

给定 nn 个整数 aia_i (ai1a_i \geq -1) 表示哈希表数组中存储的元素,1-1 表示当前位置未写入数据。

请按插入哈希表的顺序输出原序列(假设插入过程中不存在相同的数字),如果有多个满足条件的序列,输出字典序最小的。

输入描述

第一行输入一个正整数 n(1n105)n(1\le n\le 10^5)

第二行输入 nn 个整数 a1,a2,...,an(1ai109)a_1, a_2, ..., a_n(-1 \le a_i \le 10^9),含义如题。

输入保证序列为通过线性探测法插入的哈希表结果。(除 ai=1a_i = -1 外,其它数字两两互不相等。)

输出描述

输出 ll 个非负整数,表示插入哈希表后的原序列,其中 ll 为哈希表中非 1-1 的整数个数。

样例1

输入

5
-1 1 -1 3 4

输出

1 3 4

样例解释

由于没有冲突,原序列可以是 [1,3,4][1,3,4] 的任意一种排列组合,而其中 [1,3,4][1,3,4] 是所有可能的结果中字典序最小的一种。

样例2

输入

5
9 1 8 3 4

输出

1 3 4 9 8

样例解释

数据插入过程如下:$[-1, -1, -1, -1, -1]\to [-1, 1, -1, -1, -1]\to [-1, 1, -1, 3, -1]\to [-1, 1, -1, 3, 4]\to [9, 1, -1, 3, 4]\to [9, 1, 8, 3, 4]$。

若按 [1,3,4,8,9][1, 3, 4, 8, 9] 顺序插入,将得到结果 [8,1,9,3,4][8, 1, 9, 3, 4],与输入不符,因此不存在字典序更小的插入顺序。