CF2114C.Need More Arrays

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Need More Arrays

题目描述

给定一个数组 a a 包含 n n 个整数。数组按非递减顺序排序,即对于所有 1i<n 1 \le i < n ,满足 aiai+1 a_i \le a_{i + 1}

你可以从数组中移除任意数量的元素(包括不移除任何元素),且不移除的元素顺序保持不变。移除元素后,将按照以下规则生成新数组:

  • a1 a_1 被写入一个新数组;
  • 如果 a1+1<a2 a_1 + 1 < a_2 ,则 a2 a_2 被写入一个新数组;否则,a2 a_2 被写入与 a1 a_1 相同的数组;
  • 如果 a2+1<a3 a_2 + 1 < a_3 ,则 a3 a_3 被写入一个新数组;否则,a3 a_3 被写入与 a2 a_2 相同的数组;
  • \cdots

例如,如果 a=[1,2,4,6] a=[1, 2, 4, 6] ,则:

  • a1=1 a_1 = 1 被写入一个新数组,生成数组:[1] [1]
  • a1+1=2 a_1 + 1 = 2 ,因此 a2=2 a_2 = 2 被添加到现有数组,生成数组:[1,2] [1, 2]
  • a2+1=3 a_2 + 1 = 3 ,因此 a3=4 a_3 = 4 被写入一个新数组,生成数组:[1,2] [1, 2] [4] [4]
  • a3+1=5 a_3 + 1 = 5 ,因此 a4=6 a_4 = 6 被写入一个新数组,生成数组:[1,2] [1, 2] [4] [4] [6] [6]

你的任务是通过移除元素,使得上述算法生成的数组数量尽可能多。如果移除所有元素,则不会生成任何新数组。

输入格式

第一行输入包含一个整数 t t 1t104 1 \le t \le 10^4 )——测试用例的数量。

每个测试用例的第一行包含一个整数 n n 1n2105 1 \le n \le 2 \cdot 10^5 )——数组的长度。

每个测试用例的第二行包含 n n 个整数 a1,a2,,an a_1, a_2, \dots, a_n 1ai106 1 \le a_i \le 10^6 aiai+1 a_i \le a_{i + 1} )——数组的元素。

保证所有测试用例的 n n 之和不超过 2105 2 \cdot 10^5

输出格式

对于每个测试用例,输出一个整数——通过移除任意(可能为零)数量的元素后,可以获得的数组的最大数量。

说明/提示

在第一个例子中,你可以移除 a3 a_3 a5 a_5 ,得到 a=[1,2,4,6] a=[1, 2, 4, 6] ,生成数组的过程如题目描述所示。

在第二个例子中,你需要移除 a2 a_2 ,得到 a=[1,3] a = [1, 3] ,然后生成数组 [1] [1] [3] [3]

在第三个例子中,不需要移除任何元素;对于 a=[1,2,2,4] a = [1, 2, 2, 4] ,将生成数组 [1,2,2] [1, 2, 2] [4] [4]

样例

6
6
1 2 3 4 5 6
3
1 2 3
4
1 2 2 4
1
2
3
1 4 8
2
1 1
3
2
2
1
3
1

在线编程 IDE

建议全屏模式获得最佳体验