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;
}
相关推荐
炸膛坦客8 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
灯澜忆梦8 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-9 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-9 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe12 小时前
C++——多态
开发语言·c++
心平气和量大福大13 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_14 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸14 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++