【题目描述】
小 X 一个正整数序列 a1,a2,…,an 。
称它的一个子区间 [l,r] 是好的,当且仅当这个子段满足 2al+2al+1+..+2ar=2x 成立,其中 x∈N 。
小 X 喜欢好的子段。他想请问你,序列 a 中好的子区间的数量有多少?
【输入格式】
从文件 segment.in 中读取数据。
第一行输入一个整数 n ,表示序列的长度。
第二行输入一行 n 个整数,第 i 个数表示 ai 。
【输出格式】
输出到文件 segment.out 中。
输出一行一个整数,表示好的子段的数量。
【样例输入1】
3
1 1 2
【样例输出1】
5
【样例1解释】
好的子段有 (1,1),(1,2),(1,3),(2,2),(3,3) 。
(1,3) 是一个好的子段,因为 21+21+22=8=23 。
(2,3) 不是一个好的子段,因为 21+22=6 ,容易证明 6 不能被记作 2x 的形式,其中 x∈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.ans。
【数据范围及约定】
对于所有数据,1≤n≤2×105,1≤ai≤109。
测试点编号 |
n |
ai |
1 |
≤100 |
|
2,3 |
≤1000 |
4 |
≤5000 |
≤2 |
5,6 |
≤30 |
7,8 |
|
9,10 |
≤50000 |
≤2 |
11,12,13 |
≤30 |
14,15,16,17 |
|
18,19,20 |
≤200000 |