Maximize The Count
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个长度为 n 的序列 a_1, a_2, \dots, a_n,每个元素是 1n 之间的整数(可能有重复)。
\hspace{15pt}小苯想从 a 中选择一个子序列,满足对于子序列中的任意一对相邻元素,这两个元素的值之差等于它们在原序列中的下标之差。

\hspace{15pt}形式化的即,选出一些位置构成一个递增下标序列 p_1 < p_2 < \dots < p_k,满足:
\hspace{23pt}\bullet\,对于任意相邻的 p_ip_{i+1},有 p_{i+1} - p_i = a_{p_{i+1}} - a_{p_i}(下标差等于值的差)。

\hspace{15pt}你的任务就是求出,最多能选出多少个位置?

【名词解释】
\hspace{15pt}子序列:从原序列中删除任意个(可以为零,也可以为全部)元素,且保持剩余元素相对顺序不变得到的新序列。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 2 \times 10^5\right)
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \dots, a_n \left(1 \leqq a_i \leqq n\right)

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个整数,表示最多能选出的位置个数。
示例1

输入

复制
3
5
1 2 1 4 1
6
2 2 2 2 2 2
7
1 2 3 4 5 6 7

输出

复制
3
1
7

说明

\hspace{15pt}对于第一组测试数据,选择 a_1=1a_2=2a_4=4 即可。
\hspace{15pt}对于第二组测试数据,所有值相同,只能选一个位置。
\hspace{15pt}对于第三组测试数据,整个序列满足 p_{i+1}-p_i = 1a_{i+1}-a_i=1,可以全选。