线段树.
- 区间和可以转化为前缀和之差.记前缀和为 $sum$ ,从前往后加入数,加入到第 $i$ 个数的时候,就要算 $L\leq sum_i-sum_j\leq R,0\leq j<i$ 的 $j$ 的数目.
- 不等式变一下,就是求 $sum_i-R\leq sum_j\leq sum_i-L$ 的数目.用权值线段树来维护,动态开点即可.
注意权值可能是负的,所以根节点的 $l,r$ 分别为 $-inf,inf$ .
1 |
|
夢はここに 思い出は遠くに
线段树.
注意权值可能是负的,所以根节点的 $l,r$ 分别为 $-inf,inf$ .
1 | #include<bits/stdc++.h> |