B. 平衡操作
- 每次测试的时间限制:2 秒
- 每次测试的内存限制:512 兆字节
Ecrade 有一个整数数组 a1,a2,…,an。
保证对于每个 1≤i<n,有 ai=ai+1。
Ecrade 可以执行若干次操作,使数组变为严格递增。
在每次操作中,他可以选择两个整数 l 和 r(1≤l≤r≤n),并将 al,al+1,…,ar 替换为任意 r−l+1 个整数 al′,al+1′,…,ar′,需满足以下条件:
对于每个 l≤i<r,ai′ 与 ai+1′ 的比较关系必须与 ai 与 ai+1 的比较关系相同,即:
- 如果 ai<ai+1,那么 ai′<ai+1′;
- 如果 ai>ai+1,那么 ai′>ai+1′;
- 如果 ai=ai+1,那么 ai′=ai+1′。
Ecrade 想知道使数组严格递增所需的最少操作次数。请帮助他!
输入
每个测试点包含多个测试用例。
第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。
接下来是每个测试用例的描述:
每个测试用例的第一行包含一个整数 n(2≤n≤2⋅105)。
第二行包含 n 个整数 a1,a2,…,an(−109≤ai≤109)。
保证对于每个 1≤i<n,有 ai=ai+1。
保证所有测试用例的 n 之和不超过 2⋅105。
输出
对于每个测试用例,输出一个整数,表示使数组严格递增所需的最少操作次数。
示例
输入:
4
3
3 2 1
3
3 1 2
4
-2 -5 5 2
7
1 9 1 9 8 1 0
输出:
2
1
1
3
说明
在第一个测试用例中,一种得到最少操作次数的方法:
- 第一次操作:选择 l=2,r=2,并设 a2′=4,则数组变为 [3,4,1];
- 第二次操作:选择 l=1,r=2,并设 a1′=−1,a2′=0,则数组变为 [−1,0,1]。
在第二个测试用例中,一种得到最少操作次数的方法:
- 第一次操作:选择 l=2,r=3,并设 a2′=4,a3′=5,则数组变为 [3,4,5]。
在第三个测试用例中,一种得到最少操作次数的方法:
- 第一次操作:选择 l=2,r=3,并设 a2′=−1,a3′=1,则数组变为 [−2,−1,1,2]。