CF2141F Array Reduction
题目描述
给定一个包含 $n$ 个整数的数组 $a$。
每次操作,你可以选择数组中的若干元素并将它们移除。然而,你选择的元素必须满足以下两种条件之一:
- 所有被选择的元素都相等;
- 被选择的元素两两不同。
注意,如果只选择了 $1$ 个元素进行移除,则自动满足这些条件。
例如,如果 $a = \{1, 2, 1, 1, 3\}$,则你可以在一次操作中移除的元素有:
- 第 $1$ 个元素;
- 第 $1$ 个和第 $3$ 个元素;
- 第 $1$、第 $3$、第 $4$ 个元素;
- 第 $3$ 个和第 $4$ 个元素;
- 第 $2$、第 $4$、第 $5$ 个元素;
- 以及其它若干种组合。
但是,你不能选择第 $2$、第 $3$、第 $4$ 个元素,因为第 $2$ 个元素不等于第 $4$ 个元素,但第 $3$ 和第 $4$ 个元素相等。
对于每个 $x$ 从 $0$ 到 $n-1$,你需要计算将数组长度减少到恰好 $x$ 所需的最少操作次数。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例数量。
每个测试用例包含两行:
- 第一行包含一个整数 $n$($1 \le n \le 3 \cdot 10^5$),表示数组的长度;
- 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le n$),表示数组元素。
输入的额外限制:所有测试用例中 $n$ 的总和不超过 $3 \cdot 10^5$。
输出格式
对于每个测试用例,输出 $n$ 个整数 $c_0, c_1, \dots, c_{n-1}$,其中 $c_i$ 表示将数组大小恰好缩减到 $i$ 所需的最少操作次数。
说明/提示
在第一个示例中,答案可以如下得到:
- $c_{0} = 3$:移除 $a_{8}, a_{9}, a_{10}, a_{11}$;然后移除 $a_{1}, a_{2}, a_{3}, a_{4}$;再移除 $a_{5}, a_{6}, a_{7}$;
- $c_{1} = 3$:移除 $a_{8}, a_{9}, a_{10}, a_{11}$;然后移除 $a_{1}, a_{2}, a_{3}, a_{4}$;再移除 $a_{5}, a_{6}$;
- $c_{2} = 2$:移除 $a_{7}, a_{8}, a_{9}, a_{10}, a_{11}$;然后移除 $a_{1}, a_{2}, a_{3}, a_{4}$;
- $c_{3} = 2$:移除 $a_{7}, a_{8}, a_{9}, a_{10}, a_{11}$;然后移除 $a_{1}, a_{2}, a_{3}$;
- $c_{4} = 2$:移除 $a_{7}, a_{8}, a_{9}, a_{10}, a_{11}$;然后移除 $a_{1}, a_{2}$;
- $c_{5} = 1$:移除 $a_{1}, a_{7}, a_{8}, a_{9}, a_{10}, a_{11}$;
- $c_{6} = 1$:移除 $a_{7}, a_{8}, a_{9}, a_{10}, a_{11}$;
- $c_{7} = 1$:移除 $a_{1}, a_{2}, a_{3}, a_{4}$;
- $c_{8} = 1$:移除 $a_{1}, a_{2}, a_{3}$;
- $c_{9} = 1$:移除 $a_{1}, a_{2}$;
- $c_{10} = 1$:移除 $a_{7}$。
由 ChatGPT 5 翻译