#CF2114C. 需要更多数组

需要更多数组

C. 需要更多数组
每次测试时间限制:2 秒
内存限制:256 兆字节

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

你可以从数组中移除任意数量的元素(包括不移除任何元素),且不改变剩余元素的顺序。移除后,将进行如下操作:

  • a1a_1 被写入一个新数组;
  • 如果 a1+1<a2a_1 + 1 < a_2,那么 a2a_2 被写入一个新数组;否则,a2a_2 被写入与 a1a_1 相同的数组;
  • 如果 a2+1<a3a_2 + 1 < a_3,那么 a3a_3 被写入一个新数组;否则,a3a_3 被写入与 a2a_2 相同的数组;
  • 依此类推。

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

  1. a1=1a_1 = 1 被写入新数组,得到数组:[1][1]
  2. a1+1=2a_1 + 1 = 2,所以 a2=2a_2 = 2 被添加到现有数组,得到数组:[1,2][1,2]
  3. a2+1=3a_2 + 1 = 3,所以 a3=4a_3 = 4 被写入一个新数组,得到数组:[1,2][1,2][4][4]
  4. a3+1=5a_3 + 1 = 5,所以 a4=6a_4 = 6 被写入一个新数组,得到数组:[1,2][1,2][4][4][6][6]

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

输入
第一行包含一个整数 tt1t1041 \le t \le 10^4)—— 测试用例的数量。
每个测试用例的第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5)—— 数组的长度。
每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1061 \le a_i \le 10^6aiai+1a_i \le a_{i+1})—— 数组的元素。
保证所有测试用例的 nn 之和不超过 21052 \cdot 10^5

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

示例
输入

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  

说明

  • 在第一个示例中,你可以移除 a3a_3a5a_5,得到 a=[1,2,4,6]a = [1,2,4,6],其形成数组的过程如题目描述所示。
  • 在第二个示例中,你需要移除 a2a_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]