CF2114C Need More Arrays
题目描述
给定一个数组 $ a $ 包含 $ n $ 个整数。数组按非递减顺序排序,即对于所有 $ 1 \le i < n $,满足 $ a_i \le a_{i + 1} $。
你可以从数组中移除任意数量的元素(包括不移除任何元素),且不移除的元素顺序保持不变。移除元素后,将按照以下规则生成新数组:
- $ a_1 $ 被写入一个新数组;
- 如果 $ a_1 + 1 < a_2 $,则 $ a_2 $ 被写入一个新数组;否则,$ a_2 $ 被写入与 $ a_1 $ 相同的数组;
- 如果 $ a_2 + 1 < a_3 $,则 $ a_3 $ 被写入一个新数组;否则,$ a_3 $ 被写入与 $ a_2 $ 相同的数组;
- $ \cdots $
例如,如果 $ a=[1, 2, 4, 6] $,则:
- $ a_1 = 1 $ 被写入一个新数组,生成数组:$ [1] $;
- $ a_1 + 1 = 2 $,因此 $ a_2 = 2 $ 被添加到现有数组,生成数组:$ [1, 2] $;
- $ a_2 + 1 = 3 $,因此 $ a_3 = 4 $ 被写入一个新数组,生成数组:$ [1, 2] $ 和 $ [4] $;
- $ a_3 + 1 = 5 $,因此 $ a_4 = 6 $ 被写入一个新数组,生成数组:$ [1, 2] $、$ [4] $ 和 $ [6] $。
你的任务是通过移除元素,使得上述算法生成的数组数量尽可能多。如果移除所有元素,则不会生成任何新数组。
输入格式
第一行输入包含一个整数 $ t $($ 1 \le t \le 10^4 $)——测试用例的数量。
每个测试用例的第一行包含一个整数 $ n $($ 1 \le n \le 2 \cdot 10^5 $)——数组的长度。
每个测试用例的第二行包含 $ n $ 个整数 $ a_1, a_2, \dots, a_n $($ 1 \le a_i \le 10^6 $,$ a_i \le a_{i + 1} $)——数组的元素。
保证所有测试用例的 $ n $ 之和不超过 $ 2 \cdot 10^5 $。
输出格式
对于每个测试用例,输出一个整数——通过移除任意(可能为零)数量的元素后,可以获得的数组的最大数量。
说明/提示
在第一个例子中,你可以移除 $ a_3 $ 和 $ a_5 $,得到 $ a=[1, 2, 4, 6] $,生成数组的过程如题目描述所示。
在第二个例子中,你需要移除 $ a_2 $,得到 $ a = [1, 3] $,然后生成数组 $ [1] $ 和 $ [3] $。
在第三个例子中,不需要移除任何元素;对于 $ a = [1, 2, 2, 4] $,将生成数组 $ [1, 2, 2] $ 和 $ [4] $。