#T1008. 等差数列子段(subsegment)

等差数列子段(subsegment)

【题目描述】

小灰灰有一个长度为 nn 的数组:a1,a2,,ana_1, a_2, \dots, a_n

小蓝想知道这个数组中有多少个连续子段,是等差数列(特别的,长度为 11 的子段一定是等差数列)。

形式化的说,你需要确定有多少个 l,rl, r 二元组,满足 1lrn1\le l \le r \le n,且对于所有的 1i<r1\le i < r 均有 ai+1ai=al+1ala_{i+1} - a_{i} = a_{l+1} - a_l 成立。


【输入描述】

第一行一个整数表示 nn

接下来一行 nn 个空格分隔的整数,分别代表 a1,a2,,ana_1, a_2, \dots , a_n

保证:

  • 1n3×1051\le n \le 3\times 10^5
  • 1ai1091\le a_i\le 10^9

【输出描述】

输出一行一个整数表示答案。


【样例 1】

【样例 1 输入】

5
3 2 1 2 2

【样例 1 输出】

10

【样例 1 解释】

共有 10 个连续子段符合要求:[1,1][1, 1] 3[1,2][1, 2] 3 2[1,3][1, 3] 3 2 1[2,2][2, 2] 2[2,3][2, 3] 2 1[3,3][3, 3] 1[3,4][3, 4] 1 2[4,4][4, 4] 2[4,5][4, 5] 2 2[5,5][5, 5] 2。这里 [l,r][l, r] 表示选择了数组中从 llrr 的这一段连续区间。

【样例 2】

【样例 2 输入】

9
1 1 1 1 2 2 2 2 2

【样例 2 输出】

26

【样例 3】

【样例 3 输入】

9
1 2 3 4 5 6 7 8 9

【样例 3 输出】

45

【数据规模与约定】

分数 特殊性质
15 1n1001\le n \le 100
25 1n50001\le n \le 5000
10 数组中所有元素均相同
20 数组中元素单调递增
30 1n3×1051\le n\le 3\times 10^5