分块 1
分块
分块的基本思想:
以空间换时间和平衡时空复杂度
用处:维护区间信息
同线段树相比,分块的时间复杂度要高一些,换来的是灵活性和通用性
(当然更难调......)
根号分块
这里是已知用分块的时空复杂度去算块长,假定块长为
这里的原理就是上边说的平衡时空复杂度
其实最主要的应用位置就是多项式中多项和块长相关的的情况
蒲公英
维护区间众数,线段树废了(众数不满足区间可加性)
法一
预处理所有以段边界为端点区间的众数及每个点的次数
显然区间总数
维护好这一段以后剩下的就是暴力维护不在整区间的部分
记得还原现场
这样,预处理时间复杂度就是
当然,
平衡一下,
法二
存每个块众数和这些众数的位置,然后二分块找到位置相减
这时的块长约为
整数分块
如果懒得算块长,那么省点事把块长开成一个固定值,就是整数分块
弹飞绵羊
分块,块长
此时时间复杂度约为
显然这样不太体现我们的特殊性
所以我闲的大力卡了一波块数......
UPD:
然后就没有然后了
不要随便调块长
然后其实还有一些除了线性这种常见的形式,还有树上分块...
一听就知道是老毒瘤了
然后还有就是特判操作端点在同一块的情况!
(4.19吃了两个Hack......)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具