XK 又来给我们讲课了。开心!
1. Baka's Trick
两种理解:
- 双栈模拟队列。
- [找到若干个划分点,使得每个区间包含恰好一个划分点。维护划分点到划分点段的前缀、后缀信息。在在线的实现中,在队列中维护仅仅一个划分点,维护它到前面每个点和它到后面每个点的信息。当这个划分点出队时,把队列中最后的点作为新的划分点。画图理解。](???)
在网上意外发现的(好像是暴力重构):https://www.cnblogs.com/xiaoziyao/p/17413029.html
2. 在线 & 离线
- 在线:比离线多了时间维。时间维 -> 对操作(包括询问)顺序的限制。
- 离线:去掉时间维。
3. 01 反转的一个 trick
用 2 棵平衡树来维护,一棵只维护是 0 的点,另一棵只维护是 1 的点。
01 反转操作相当于交换两棵平衡树上的某段区间。
4. 线段树区间二分
线段树子树二分直接做即可。但线段树区间二分有区间的限制,不好直接做,考虑转成线段树子树二分。
于是我们把这段区间在线段树上对应的 [log](?)个结点取出来。依次看答案是否在当前结点,如果不在就接着看下一个结点,如果在就直接在以这个结点为根的子树里二分(线段树子树二分)即可。
时间是单 log 的,因为找线段树子树二分的起点是 log,线段树子树二分也是 log。
实际实现不用真正把区间对应的 [log](?)个结点都抓出来,外层的找起点可以在线段树上直接找。见下面例题我的代码或我参考的那篇题解的代码。
例题:P11071 「QMSOI R1」 Distorted Fate。
5. 空间优化
- 转成只有 01[(或者类似,总之很小[/很少](很少 -> 离散化转成很小))](?),用 bool 之类的东西来存。只有 01 就可以直接用 bitset 了。(缩小值域)
- 上面一条的一个另外的东西,比如三进制的状态离散化之后可以转成二进制(好像是插头 DP 板子里[要](???)用)。(缩小定义域)
- 复用优化空间。
- 离线复用优化空间。
6. 关注点权正负
[如果点权都是正的(或者非负),想想贪心。](???)
例题:[P10641](?)。
7. 全局 xor 有结合律,还能拆
8. 树上距离,转成 dep 的和差(dep 不一定是深度,可以把 和根之间的路径上的边权和 作为深度)。有时需要分讨 lca。
lr 推的题:https://qoj.ac/problem/6504
标签:二分,树子,2024.10,log,线段,离线,结点,数据结构 From: https://www.cnblogs.com/huangkxQwQ/p/18443851