B. 使其变成锯齿形
每个测试的时间限制:1.5 秒
每个测试的内存限制:256 兆字节
如果一个长度为 m 的任意整数数组 b 满足:对于所有 i (1≤i<m),
- 若 i 是奇数,则 bi<bi+1;
- 若 i 是偶数,则 bi>bi+1;
则称数组 b 是awesome(极好的)。
换句话说,不等式 b1<b2>b3<b4>… 成立。
你有一个长度为 n 的正整数数组 a。
你可以任意多次执行以下两种操作,顺序不限:
- 操作 1:选择一个下标 i (1≤i≤n),并执行
ai:=max(a1,…,ai),即将 ai 替换为到 i 为止的前缀最大值。
- 操作 2:选择一个下标 i (1≤i≤n),然后将 ai 减少 1。
你需要最小化操作 2 的次数,使得数组 a 变成 awesome。
注意:你不需要最小化操作 1 的次数。
输入格式
每个测试包含多个测试用例。
第一行输入一个整数 t (1≤t≤104),表示测试用例的数量。
接下来每个测试用例的输入格式如下:
- 第一行输入一个整数 n (2≤n≤2⋅105),表示数组 a 的长度。
- 第二行输入 n 个整数 a1,a2,…,an (1≤ai≤109)。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,输出使数组 a 变成 awesome 所需的最少操作 2 的次数。
示例
输入:
7
5
1 4 2 5 3
4
3 3 2 1
5
6 6 6 6 6
7
1 2 3 4 5 6 7
3
3 2 1
2
1 2
9
65 85 19 53 21 79 92 29 96
输出:
0
1
3
6
1
0
13
示例解释
- 第一个测试用例:数组已经是 awesome,所以不需要任何操作。
- 第二个测试用例:可以通过以下步骤使数组变成 awesome:
- 使用操作 2,将 a1 减少 1:[3,3,2,1]→[2,3,2,1]
- 使用操作 1,将 a4 改为 max(2,3,2,1)=3:[2,3,2,1]→[2,3,2,3]
得到 [2,3,2,3],满足 2<3>2<3。
可以证明这是最少的操作 2 次数。