P14302 基础倍增练习题 6 / 小 U 的树 题解 / 斜二进制倍增学习笔记
:::::info[题目基本信息]
考察:倍增(省选/NOI-)。
题目简介:
你有
你需要进行
- 操作:给两个不联通的点连边。
- 查询:询问两个连通的点间的路径的点权的最大子段和。
数据范围:
-
-
- 数据强制在线。
时间限制:4s。
空间限制:512MB。
:::::
斜二进制倍增模板题(出题人题解)。
先引入斜二进制是什么。
:::::success[斜二进制]
斜二进制是第
容易发现一些性质:
- 每一位只可能出现
0,1 或2 。 - 最多出现
1 个2 。 - 若出现了
2 ,那么比2 所在位低的位都为0 。
设函数
:::::
下面引入斜二进制倍增:
:::::success[斜二进制倍增]
定义一棵树是通过线段树偏移得到的,每个点都只作为一个区间的右端点,类似 BIT,每个点的区间为
令
类似 BIT 一样倍增即可。
:::::
在这个题中,斜二进制倍增要上树,每次新增点的时候选择较小的一个子树进行重构,时间复杂度是启发式合并的
讲的好像有点草率了。细节见代码吧。
时间复杂度为
code