D. Matryoshkas

time limit per test

2 seconds

memory limit per test

256 megabytes

Matryoshka is a wooden toy in the form of a painted doll, inside which you can put a similar doll of a smaller size.

A set of nesting dolls contains one or more nesting dolls, their sizes are consecutive positive integers. Thus, a set of nesting dolls is described by two numbers: s --- the size of a smallest nesting doll in a set and m --- the number of dolls in a set. In other words, the set contains sizes of s,s+1,...,s+m−1 for some integer s and m (s,m>0).

You had one or more sets of nesting dolls. Recently, you found that someone mixed all your sets in one and recorded a sequence of doll sizes --- integers a1,a2,...,an.

You do not remember how many sets you had, so you want to find the minimum number of sets that you could initially have.

For example, if a given sequence is a=2,2,3,4,3,1. Initially, there could be 2 sets:

  • the first set consisting of 4 nesting dolls with sizes 1,2,3,4;
  • a second set consisting of 2 nesting dolls with sizes 2,3.

According to a given sequence of sizes of nesting dolls a1,a2,...,an, determine the minimum number of nesting dolls that can make this sequence.

Each set is completely used, so all its nesting dolls are used. Each element of a given sequence must correspond to exactly one doll from some set.

Input

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

The description of the test cases follows.

The first line of each test case contains one integer n (1≤n≤2⋅105) --- the total number of matryoshkas that were in all sets.

The second line of each test case contains n integers a1,a2,...,an (1≤ai≤109) --- the sizes of the matryoshkas.

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

Output

For each test case, print one integer k --- the minimum possible number of matryoshkas sets.

Example

Input

Copy

复制代码

10

6

2 2 3 4 3 1

5

11 8 7 10 9

6

1000000000 1000000000 1000000000 1000000000 1000000000 1000000000

8

1 1 4 4 2 3 2 3

6

1 2 3 2 3 4

7

10 11 11 12 12 13 13

7

8 8 9 9 10 10 11

8

4 14 5 15 6 16 7 17

8

5 15 6 14 8 12 9 11

5

4 2 2 3 4

Output

Copy

复制代码
2
1
6
2
2
2
2
2
4
3

Note

The first test case is described in the problem statement.

In the second test case, all matryoshkas could be part of the same set with minimum size s=7.

In the third test case, each matryoshka represents a separate set.

解题说明:此题是一道数学题,将一个数列拆分为多个连续递增数列,确保拆分后的数列中每个数只出现一次。先统计出数列中每个数字出现的个数,然后对数列进行排序,根据统计的个数找出子序列。

cpp 复制代码
#include <bits/stdc++.h>
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
int a[2000020];
map<int, int>cnt;
main()
{
	int T;
	cin >> T;
	while (T--)
	{
		int n;
		cin >> n;
		cnt.clear();
		for (int i = 1; i <= n; i++)
		{
			cin >> a[i];
			cnt[a[i]]++;
		}
		sort(a + 1, a + n + 1);
		int ans = 0;
		for (int i = 1; i <= n; i++)
		{
			if (cnt[a[i]])
			{
				int now = a[i];
				while (cnt[now])
				{
					cnt[now]--;
					now++;
				}
				ans++;
			}
		}
		cout << ans << endl;
	}
	return 0;
}
相关推荐
wabs66611 小时前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网
mifengxing12 小时前
LeetCode 41.缺失的第一个正数|Hard题O(n)+O(1)最优解法深度解析
java·算法·leetcode·排序算法
Tongzhi202612 小时前
从部署到运维:通芝科技无感考勤一体机的全流程效率解析
运维·数据结构·科技·算法·贪心算法
Wang's Blog13 小时前
AI Agent白手起家30: 动态示例选择器之根据长度选择 Few Shot 示例
算法
oyguyteggytrrwwwrt14 小时前
自制交叉线路识别算法
算法
手写码匠14 小时前
华为云Flexus+DeepSeek征文|Dify 多智能体协同编排实战:R1 规划 + V3 执行,构建企业 Agent 团队
人工智能·深度学习·算法·aigc
晓天衡宇•评测社区15 小时前
FSR-Bench 前沿科学推理榜单发布:GPT-5.5 居首,“会推理”未必“能答对”
算法
程序喵大人16 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
hanlin0317 小时前
动态规划专练:力扣第121、122题
笔记·算法·leetcode
To_OC17 小时前
LC 74 搜索二维矩阵:换皮的二分查找,我居然一开始没看出来
javascript·算法·leetcode