分块 1

分块

分块的基本思想:

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

用处:维护区间信息

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

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

根号分块

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

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

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

蒲公英

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

法一

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

显然区间总数K22

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

记得还原现场

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

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

平衡一下,K3=N,就是块长K=N3

法二

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

这时的块长约为NlogN

整数分块

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

弹飞绵羊

分块,块长K=N

此时时间复杂度约为O(N32)

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

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

UPD:

然后就没有然后了

不要随便调块长

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

一听就知道是老毒瘤了

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

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

posted @   2K22  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示