分块
小于 1 分钟
时间复杂度:n
把一个数组分成 段
对于一个区间l,r的操作,可以把他分成长度小于 的段(两边段)和长度等于 的完整的段(中间段)。
以一个区间加上一个数d,求一个区间的所有数的和为例:
add:本段中所有的数都加上d
sum:本段里所有真实数的总和(算上add)
修改操作:
完整区间:直接+d add+=d sum+=sum+d*len
不完整区间:暴力,区间里的数一个一个加上d w[i]+=d sum+=d
查询操作:
完整区间:就是sum
不完整区间:暴力,算区间里的数的总和,一个一个加起来。
Loading...