CF1870G MEXanization
题目描述
我们定义 $f(S)$。设 $S$ 是一个非负整数的多重集(即可以包含重复元素)。每次操作,你可以选择 $S$ 的任意非空子集(也可以包含重复元素),将该子集中的所有元素从 $S$ 中移除,并将该子集的 MEX 加入 $S$。你可以进行任意次这样的操作。所有操作结束后,$S$ 中应只剩下恰好一个数。$f(S)$ 表示通过任意操作序列后,$S$ 最终可能剩下的最大数。
给定一个长度为 $n$ 的非负整数数组 $a$。对于它的每个前缀,计算 $f(S)$,其中 $S$ 是对应的前缀(对于第 $i$ 个前缀,$S$ 包含数组 $a$ 的前 $i$ 个元素)。
MEX(minimum excluded)指的是一个数组中未出现的最小非负整数。例如:
- $[2,2,1]$ 的 MEX 是 $0$,因为 $0$ 不在数组中。
- $[3,1,0,1]$ 的 MEX 是 $2$,因为 $0$ 和 $1$ 在数组中,但 $2$ 不在。
- $[0,3,1,2]$ 的 MEX 是 $4$,因为 $0$、$1$、$2$ 和 $3$ 都在数组中,但 $4$ 不在。
输入格式
第一行包含一个整数 $t$($1 \leq t \leq 10^4$)——表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 2 \times 10^5$)——数组 $a$ 的长度。
每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i \leq 2 \times 10^5$)——数组 $a$。
保证所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$。
输出格式
对于每个测试用例,输出 $n$ 个数:对于数组 $a$ 的每个前缀,输出对应 $S$ 的 $f(S)$。
说明/提示
考虑第一个测试用例。对于长度为 $1$ 的前缀,初始多重集为 $\{179\}$。如果什么都不做,结果就是 $179$。
对于长度为 $2$ 的前缀,初始多重集为 $\{57, 179\}$。可以通过如下操作序列得到 $2$:
1. 对 $\{57\}$ 进行操作,多重集变为 $\{0, 179\}$。
2. 对 $\{179\}$ 进行操作,多重集变为 $\{0, 0\}$。
3. 对 $\{0\}$ 进行操作,多重集变为 $\{0, 1\}$。
4. 对 $\{0, 1\}$ 进行操作,多重集变为 $\{2\}$。这就是答案。
考虑第二个测试用例。对于长度为 $1$ 的前缀,初始多重集为 $\{0\}$。如果对 $\{0\}$ 进行操作,多重集变为 $\{1\}$。这就是答案。
由 ChatGPT 4.1 翻译