题意 有一个整数数组
a
1
,
a
2
,
a
3
,
.
.
.
a
n
a_1,a_2,a_3,...a_n
a1,a2,a3,...an,定义
S
(
i
,
j
)
=
a
i
+
a
i
+
1
+
a
i
+
2
+
.
.
.
+
a
j
S(i,j)=a_i+a_{i+1}+a_{i+2}+...+a_j
S(i,j)=ai+ai+1+ai+2+...+aj 求
∑
i
=
1
n
∑
j
=
i
n
(
⌊
l
o
g
2
S
(
i
,
j
)
⌋
+
1
)
∗
(
i
+
j
)
\sum_{i=1}^n\sum_{j=i}^n(\lfloor log_2S(i,j)\rfloor+1)*(i+j)
∑i=1n∑j=in(⌊log2S(i,j)⌋+1)∗(i+j) 特别的
l
o
g
2
0
=
0
log_20=0
log20=0
思路 这个题有个小技巧,
⌊
l
o
g
2
N
⌋
+
1
\lfloor log_2N\rfloor+1
⌊log2N⌋+1其实是N的二进制位数。就本题而言,S的最大值1e5*1e5=1e10,所以
(
⌊
l
o
g
2
S
(
i
,
j
)
⌋
+
1
(\lfloor log_2S(i,j)\rfloor+1
(⌊log2S(i,j)⌋+1 的值最大是34,我们可以先枚举位数,然后枚举i,最后用尺取的方法求得j的范围(l,r);