|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 柿子饼同学 于 2024-7-22 22:31 编辑
分块思想很常见, 本期是相对简单的 分块思想 和 分块的数据结构
这几天学的包括 分块决策, 简单莫队, 分块维护什么什么
区间 tag 操作一定要写 pushdown !!!!!
遇到散块就要 pushdown !!! 更换 tag 要注意
下标不要套错了, 不要混淆值和位置之类的
CF444C
分块决策思想 (根号分治)
如果我们发现一个算法的时间复杂度对值域很敏感, 或者这个算法只适用于一部分的值域
就考虑分块决策, 用多种算法分别对应多个值域, 使得复杂度平衡下来
莫队配合值域分块 的目的也是平衡
栗子1 - 青蛙跳
现在有n堆食物,依次编号为1到n,每堆上有Ai的食物
青蛙的弹跳值是t,如果青蛙在x位置上,它起跳后,就会依次去t+x,x+2*t….,一直跳到没有食物为止
嘟想知道,当他把青蛙放在x上,且青蛙的弹跳值为t时,可以获得多少的食物
发现只用枚举 t 的时候, t 很小的情况下会超时, 如果用 dp 做, 空间会超, 而且 t 大的时候有很多不必要计算
所以以 sqrt(n) 为界, t 小的时候用 dp预处理, t 大的时候暴力跳, 这样一次操作的复杂度不会超过 O(sqrt(n))
栗子2 - 微信步数
为了促进懒人国的体育发展,懒人国国王举办了有着丰厚奖品的微信步数竞争大赛。
现在懒人国国王知道懒人国所有国民之间的好友关系。懒人国国王想要知道国民的锻炼情况。
对此,他想要知道对于一个人,他好友里(包括他自己)微信步数最多的是多少。
输入格式
第一行三个整数分别表示总人数,好友关系数量,还有操作数。
然后输入边, 一次操作询问 x 相连的点权值最大值, 一次操作把 x 的权值加上 k
如果一个点连的点很少, 直接暴力即可
如果一个点连的点很多(胖点) , 我们就可以直接先把和这些点相邻的点找出来, 每次更新一个点的时候把(胖点) 顺便更新答案
分块/莫队
分块可以看成不同的视角, 比如维护的时候可以当作线段树类似的方法维护
每个块可以想象成一个普通点, 这样可以在块上搞事情, 比如前缀块众数什么的
每个块可以缩小范围, 比如要跳出序列的路径长度, 可以用分块维护每个点跳出块的长度和跳到哪里, 从而限定范围容易维护修改
分块的应用非常灵活, 这时要注意开阔思路, 例如权值对应下标, 缩小范围方便维护等等
莫队就是简单入个门...
遇到不好维护的东西想想离线 + 莫队
栗子
P1494 [国家集训队] 小 Z 的袜子
珂朵莉树/分块
DZY Loves Colors
注意推加法柿子时用的 N - x 的技巧, 注意除法分类时的分块决策 (小的预处理, 大的暴力算)
P5355 [Ynoi2017] 由乃的玉米田
莫队配合值域分块, 平衡了复杂度, 比树状数组优
P4396 [AHOI2013] 作业
限定范围好维护
P3203 [HNOI2010] 弹飞绵羊
值对应下标
P4137 Rmq Problem / mex
|
|