Unique Number
题号:NC313660
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯给定你一个长度为 n 的序列 c_1, c_2, \dots, c_n,初始时所有 c_i = 0
\hspace{15pt}你可以进行如下操作任意次(可以不执行):
\hspace{23pt}\bullet\,选择一个前缀 [1, i] \left(1 \leqq i \leqq n \right),并将前缀中所有元素的值增加 1
\hspace{15pt}同时,你还会得到一个长度为 n 的“限制序列” d_1, d_2, \dots, d_n

\hspace{15pt}你的任务就是求出:在保证操作过程中任意时刻,所有位置 i 均满足 c_i \leqq d_i 的前提下,最终能使得序列 c不同数值的种类数最多是多少?

输入描述:

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

\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 2 \times 10^5 \right)
\hspace{15pt}第二行输入 n 个整数 d_1, d_2, \dots, d_n\left(0 \leqq d_i \leqq 10^9 \right)

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

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个整数,表示在操作过程中不违反限制的情况下,序列 c 最终能包含的不同数值的种类数的最大值。
示例1

输入

复制
2
4
2 2 1 0
3
0 0 0

输出

复制
3
1

说明

\hspace{15pt}对于第一组测试数据,d = \{2,2,1,0\}。一种最优操作方案:
\hspace{23pt}\bullet\,对前缀 [1, 2]1c = \{1, 1, 0, 0\},未超限。
\hspace{23pt}\bullet\,对前缀 [1, 3]1c = \{2, 2, 1, 0\},未超限。
\hspace{15pt}我们得到数值 0,1,2 同时出现,因此输出 3

\hspace{15pt}对于第二组测试数据,d = \{0,0,0\},任何操作都会导致 c_i > 0 从而超过限制,因此只能保持全 0,种类数为 1(只有数值 0)。