CF2207E1 N-MEX (Constructive Version)
题目描述
[Clan War Map — Supercell, Clash of Clans](https://www.youtube.com/watch?v=HmB4MwbxWGY) 这是一道构造题。本题和其它版本的不同之处在于,你需要构造一个答案,或者报告无法实现,并且 $0 \leq b_i \leq 10^9$。只有在你解决了该题所有版本后,才可以进行 hack 操作。
“大师工匠”不喜欢重复性工作——修复基地、十五次升级大本营,以及又做一题关于 MEX 的编程题。因此,这不会是你平常遇到的 MEX 问题。
对于任意正整数 $k$,定义整数集合 $S$ 的 $k$-mex 为 $S$ 中未出现的第 $k$ 小非负整数。例如,$[1, 2, 1]$ 的 $1$-mex 和 $2$-mex 分别是 $0$ 和 $3$。
给定正整数 $n$,以及一个非负整数数组 $[a_1, \ldots, a_n]$,请判断是否存在一个非负整数数组 $[b_1, \ldots, b_n]$,使得:
- 对于所有 $1 \leq i \leq n$,$[b_1, \ldots, b_i]$ 的 $(n-i+1)$-mex 等于 $a_i$。
如果存在这样的数组 $b$,请给出任意一个符合条件的 $[b_1, \ldots, b_n]$。
输入格式
每个测试点包含多组测试用例。第一行为测试用例个数 $t$($1 \le t \leq 10^4$)。接下来是每个测试用例的描述:
每个测试用例的第一行为一个正整数 $n$($1 \leq n \leq 2 \times 10^5$),表示数组 $a$ 的长度。
第二行为 $n$ 个整数 $a_1, \ldots, a_n$($0 \leq a_i \leq 10^9$)。
保证所有测试用例的 $n$ 之和不超过 $2 \times 10^5$。
输出格式
对于每个测试用例,输出一行 "YES" 或 "NO",表示是否存在这样的数组 $b$。答案不区分大小写,比如 "yEs"、"yes"、"Yes"、"YES" 均视为肯定答案。
若答案为 "YES",则在下一行输出 $n$ 个整数 $b_1, \ldots, b_n$($0 \leq b_i \leq 10^9$),使得对于所有 $1 \leq i \leq n$,$[b_1, \ldots, b_i]$ 的 $(n-i+1)$-mex 等于 $a_i$。
说明/提示
在第一个测试用例中,数组 $a = [3, 3, 1]$。可以验证数组 $b = [2, 0, 2]$ 满足条件,因为:
- $[b_1]=[2]$ 的 $3$-mex 是 $a_1=3$,
- $[b_1, b_2]=[2, 0]$ 的 $2$-mex 是 $a_2=3$,
- $[b_1, b_2, b_3]=[2, 0, 2]$ 的 $1$-mex 是 $a_3=1$。
在第二个测试用例中,数组 $a = [2, 1, 3]$,可以证明不存在符合要求的数组 $b$。
在第三个测试用例中,数组 $a = [0]$。可以验证数组 $b = [67]$ 满足条件,因为 $[b_1]=[67]$ 的 $1$-mex 是 $a_1=0$。
由 ChatGPT 5 翻译