题目描述
Yousef 有一个数组 a,里面装着 n 个正整数。
他定义了一个针对长度为 ∣c∣≥3 的数组 c 的“缩减操作”:
- 选一个下标 i(满足 1<i<∣c∣),条件是 ci−1+ci+1>ci。
- 用一个整数 x=ci−1−ci+ci+1 替换掉三元组 {ci−1,ci,ci+1}。
新整数 x 就占据原来三元组的位置,数组长度因此缩短了 2。
如果一个数组能通过零次或多次这样的操作,最终缩减成只有一个元素,我们就称它是好数组。注意,长度为 1 的数组永远是好数组。
Yousef 想让你数一数,有多少对 (l,r)(满足 1≤l≤r≤n)使得子数组 a[l,r] 是好数组。
输入格式
第一行是一个整数 t(1≤t≤104)——测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行是整数 n(1≤n≤2×105)——数组大小。
第二行有 n 个整数 a1,a2,…,an(1≤ai≤109)——数组元素。
保证所有测试用例中 n 的总和不超过 2×105。
输出格式
每个测试用例输出一个整数——好子数组的数量。
样例
4
3
10 20 10
5
1 1 1 1 1
4
5 1 5 1
1
100
3
9
5
1
样例说明
在第一个例子中,a=[10,20,10]。长度为 1 的子数组 [10]、[20] 和 [10] 都是好数组(共 3 个)。而整个子数组 [10,20,10] 不是好数组。因为缩减时必须选 i=2,条件 a1+a3>a2 变成 10+10>20,即 20>20,显然不成立。
在第二个例子中,a=[1,1,1,1,1]:
- 所有 5 个长度为 1 的子数组都是好数组。
- 所有 4 个长度为 2 的子数组都不是好数组。
- 所有 3 个长度为 3 的子数组(即 [1,1,1])都是好数组,因为 1+1>1。
- 所有 2 个长度为 4 的子数组都不是好数组。
- 长度为 5 的子数组是好数组:$[1, 1, 1, 1, 1] \xrightarrow{i=2} [1, 1, 1] \xrightarrow{i=2} [1]$。
- 好子数组总数是 =5+3+1=9。
翻译由 ChatGPT 4.1 完成。
来源
Codeforces 2227G,英文题名 Drowning。