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;
}
相关推荐
WL学习笔记14 分钟前
顺序表详解
c语言·数据结构
skywalk816325 分钟前
记录段言的开发过程
开发语言·学习·编程
未若君雅裁33 分钟前
JVM 垃圾回收器全景与G1深度解析
java·开发语言·jvm
霸道流氓气质33 分钟前
Java 大数据量异步处理方案:线程池 vs 消息队列
java·开发语言
devilnumber33 分钟前
想真正吃透 + 灵活运用 Java 代理模式
java·开发语言·代理模式
AC赳赳老秦38 分钟前
OpenClaw 助力技术面试:自动生成面试题、模拟面试、整理面试知识点
开发语言·python·面试·职场和发展·自动化·deepseek·openclaw
刘科领41 分钟前
修改jdk 第一步: 仓库以及构建(jdk17)
java·开发语言
C+-C资深大佬1 小时前
C++ 中的 constexpr与 const区
java·开发语言·c++
仙俊红1 小时前
Java 单例模式:类里面为什么可以有自己类型的字段?
java·开发语言·单例模式
_Evan_Yao1 小时前
面向对象实战:用 Java/Python 设计一个简单的“怪物战斗”小游戏
java·开发语言