分块 - 优雅地维护更一般的信息
I.综述&解释
自然,分块更加简单直接,就是对数据进行一定划分,对于大块进行维护,不成大块直接朴素。
更加通用,当然也更慢。
II.起源
这同样是要维护一段区间的信息。
我们牺牲了更多的效率,预处理一部分信息保存,这样我们尽可能地提高信息的使用率(尽管没有前两者高),但是更接近朴素,这就意味着更加通用。
对于一些甚至不满足区间可加性的数据(e.g. 区间众数),分块也可以通过在块上保存更多信息来进行处理。
但是线段树就不行了,如果在每个节点都建立数组,那么它不仅空间开销太大,时间也会变成,因为请注意,一般我们处理的数据都可以相加的,可是这次我们要相加了,这是不可接受的(线段树的分治意味着它必然不能选择其他块长,不过分块就可以控制这个长度来平衡)。
当然,还有扩展的分治——莫队算法,这种算法,对询问进行分块排序,朴素地从上一个询问移动到下一个询问,分块在此只是为了尽可能地平均分布各个询问,降低转移复杂度。
III.基操
- 初始化(init)
初始化块的信息
- 修改(modify)
中间有大块的直接修改,没有大块的暴力修改。
- 询问(query)
中间有大块的直接累计答案,没有的暴力枚举累计答案。
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18281774

浙公网安备 33010602011771号