#P11536. [2024省队模拟]区间

[2024省队模拟]区间

【题目描述】

​ 小 X\text{X} 一个正整数序列 a1,a2,,ana_1,a_2,\dots,a_n

​ 称它的一个子区间 [l,r][l,r] 是好的,当且仅当这个子段满足 2al+2al+1+..+2ar=2x2^{a_l}+2^{a_{l+1}}+..+2^{a_r}=2^x 成立,其中 xNx\in N

​ 小 X\text{X} 喜欢好的子段。他想请问你,序列 aa 中好的子区间的数量有多少?

【输入格式】

​ 从文件 segment.in\text{segment.in} 中读取数据。

​ 第一行输入一个整数 nn ,表示序列的长度。

​ 第二行输入一行 nn 个整数,第 ii 个数表示 aia_i

【输出格式】

​ 输出到文件 segment.out\text{segment.out} 中。

​ 输出一行一个整数,表示好的子段的数量。

【样例输入1】

3
1 1 2

【样例输出1】

5

【样例1解释】

​ 好的子段有 (1,1),(1,2),(1,3),(2,2),(3,3)(1,1),(1,2),(1,3),(2,2),(3,3)

(1,3)(1,3) 是一个好的子段,因为 21+21+22=8=232^1+2^1+2^2=8=2^3

(2,3)(2,3) 不是一个好的子段,因为 21+22=62^1+2^2=6 ,容易证明 66 不能被记作 2x2^x 的形式,其中 xNx\in N

【样例输入2】

7
3 4 3 5 3 4 3

【样例输出2】

13

【样例2解释】

​ 好的子段有 $(1,1),(1,3),(1,4),(2,2),(2,5),(3,3),(3,6),(4,4),(4,7),(5,5),(5,7),(6,6),(7,7)$ 。

【样例3】

​ 见选手目录下的 segment3.in/segment3.anssegment3.in/segment3.ans

【数据范围及约定】

​ 对于所有数据,1n2×1051ai1091≤n≤2\times 10^5,1≤a_i≤10^9

测试点编号 nn aia_i
11 100\le 100
2,32,3 1000\le 1000
44 5000\le 5000 2\le 2
5,65,6 30\le 30
7,87,8
9,109,10 50000\le 50000 2\le 2
11,12,1311,12,13 30\le 30
14,15,16,1714,15,16,17
18,19,2018,19,20 200000\le 200000