CF2135A Against the Difference
题目描述
我们定义一个“块”为一个数组,其中所有元素均等于该数组的长度。例如,$[3, 3, 3]$,$[1]$ 和 $[4, 4, 4, 4]$ 都是块,而 $[1, 1, 1]$ 和 $[2, 3, 3]$ 不是块。
如果一个数组可以通过任意多个块(可以为零个块)的拼接得到,则称该数组为“整洁的”。注意,空数组也视为整洁的。
给定一个由 $n$ 个整数构成的数组 $a$。请你求出其最长整洁子序列的长度$^{\text{∗}}$。
$^{\text{∗}}$ 如果序列 $c$ 可以通过从序列 $a$ 中删除若干(可以为零或全部)任意位置的元素得到,则称 $c$ 是 $a$ 的一个子序列。
输入格式
每组测试包含若干组数据。第一行为测试组数 $t$,$1 \leq t \leq 10^4$。接下来是每组测试数据。
每组测试数据的第一行为一个整数 $n$,$1 \leq n \leq 2\cdot10^5$,表示数组 $a$ 的长度。
第二行为 $n$ 个整数 $a_1,a_2,\ldots,a_n$,$1 \leq a_i \leq n$,表示数组 $a$ 的元素。
保证所有测试数据的 $n$ 之和不超过 $2\cdot10^5$。
输出格式
对于每组测试数据,输出一个整数,表示数组 $a$ 的最长整洁子序列的长度。
说明/提示
在第一个测试用例中,整个数组 $[1]$ 本身是整洁的,因为它本身就是一个块。
在第二个测试用例中,整个数组 $[2, 2]$ 本身是整洁的,因为它本身就是一个块。
在第三个测试用例中,整个数组 $[2,2,1,1]$ 本身是整洁的,因为它可以拆成三个块:$[2,2]$、$[1]$ 和 $[1]$。
在第四个测试用例中,$a$ 的一个最长整洁子序列是 $[1, 3, 3, 3, 1]$。
在第五个测试用例中,最长整洁子序列为空。
由 ChatGPT 5 翻译