C. Need More Arrays

time limit per test

2 seconds

memory limit per test

256 megabytes

Given an array a and n integers. It is sorted in non-decreasing order, that is, ai≤ai+1 for all 1≤i<n.

You can remove any number of elements from the array (including the option of not removing any at all) without changing the order of the remaining elements. After the removals, the following will occur:

  • a1 is written to a new array;
  • if a1+1<a2, then a2 is written to a new array; otherwise, a2 is written to the same array as a1;
  • if a2+1<a3, then a3 is written to a new array; otherwise, a3 is written to the same array as a2;
  • ⋯

For example, if a=1,2,4,6, then:

  • a1=1 is written to the new array, resulting in arrays: 1;
  • a1+1=2, so a2=2 is added to the existing array, resulting in arrays: 1,2;
  • a2+1=3, so a3=4 is written to a new array, resulting in arrays: 1,2 and 4;
  • a3+1=5, so a4=6 is written to a new array, resulting in arrays: 1,2, 4, and 6.

Your task is to remove elements in such a way that the described algorithm creates as many arrays as possible. If you remove all elements from the array, no new arrays will be created.

Input

The first line of input contains one integer t (1≤t≤104) --- the number of test cases.

The first line of each test case contains one integer n (1≤n≤2⋅105) --- the length of the array.

The second line of each test case contains n integers a1,a2,...,an (1≤ai≤106, ai≤ai+1) --- the elements of the array.

It is guaranteed that the sum of n across all test cases does not exceed 2⋅105.

Output

For each test case, output one integer --- the maximum number of arrays that can be obtained by removing any (possibly zero) number of elements.

Example

Input

Copy

复制代码

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

Output

Copy

复制代码
3
2
2
1
3
1

Note

In the first example, you can remove a3 and a5, then a=1,2,4,6, the process of forming arrays for it is shown in the statement.

In the second example, you need to remove a2, after which a=1,3, and the arrays 1 and 3 will be written.

In the third example, no removals are needed; for a=1,2,2,4, the arrays 1,2,2 and 4 will be written.

解题说明:此题采用贪心算法,为了得到尽可能多的数组,那么只需要找出那些ai+1<ai+1的情况,从左到右遍历,不满足条件就删除这个元素。

cpp 复制代码
#include<stdio.h>

int arr[200008];

int main() 
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		int n;
		scanf("%d", &n);
		
		for (int i = 0; i < n; i++) 
		{
			scanf("%d", &arr[i]);
		}
		int count = 1;
		int ref = arr[0];
		for (int i = 0; i < n - 1; i++) 
		{
			if (ref + 1 < arr[i + 1]) 
			{
				count++;
				ref = arr[i + 1];
			}
		}
		printf("%d\n", count);
	}
	return 0;
}
相关推荐
山下梅子酒2256 小时前
洛谷-入门-B2070
c语言
智鸟科技GemeOpen开发者智能设备6 小时前
智能插座二次开发如何接入Home Assistant,从零开始完整工程实现(Python+React)
开发语言·python·物联网·react.js·智能家居
疯狂成瘾者6 小时前
海康 Artemis 接口对接
开发语言·lua
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2601_962218617 小时前
C++中decltype关键字的实现
开发语言·c++
hqyjzsb7 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯
孙启超7 小时前
【AI开发之Rust】第 19 课:UniFFI 导出核心能力
开发语言·后端·rust
2601_966949657 小时前
股票池发生变化后,如何高效更新行情数据?从全量刷新到增量同步
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
繁华的地方不一定留下你的脚印7 小时前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
小羊没烦恼!7 小时前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#