分块 1

分块

分块的基本思想:

以空间换时间平衡时空复杂度

用处:维护区间信息

同线段树相比,分块的时间复杂度要高一些,换来的是灵活性和通用性

(当然更难调......)

根号分块

这里是已知用分块的时空复杂度去算块长,假定块长为 \(K\)

这里的原理就是上边说的平衡时空复杂度

其实最主要的应用位置就是多项式中多项和块长相关的的情况

蒲公英

维护区间众数,线段树废了(众数不满足区间可加性)

法一

预处理所有以段边界为端点区间的众数及每个点的次数

显然区间总数\(\frac{K^2}{2}\)

维护好这一段以后剩下的就是暴力维护不在整区间的部分

记得还原现场

这样,预处理时间复杂度就是\(O(NK^2+MN/K)\)

当然,\(M,N\)同数量级\((4e4)\)

平衡一下,\(K^3=N\),就是块长\(K=\sqrt[3]N\)

法二

存每个块众数和这些众数的位置,然后二分块找到位置相减

这时的块长约为\(\sqrt{NlogN}\)

整数分块

如果懒得算块长,那么省点事把块长开成一个固定值,就是整数分块

弹飞绵羊

分块,块长\(K=\sqrt{N}\)

此时时间复杂度约为\(O(N^\frac{3}{2})\)

显然这样不太体现我们的特殊性

所以我闲的大力卡了一波块数......

UPD:

然后就没有然后了

不要随便调块长

然后其实还有一些除了线性这种常见的形式,还有树上分块...

一听就知道是老毒瘤了

然后还有就是特判操作端点在同一块的情况!

4.19吃了两个Hack......

posted @ 2022-05-15 20:31  2K22  阅读(40)  评论(0)    收藏  举报