倍增
倍增-总结
序列
前2题题意:https://blog.csdn.net/weixin_52536621/article/details/127104830
区间分段
考虑进行预处理每个数如果只能有一段到达的位置,再进行倍增,最后倍增跳跃即可。
最优贸易简化版
预处理每个点向后走 \(2^j\) 不的最小买入价格、最大卖出价格、最大收益。
天才ACM
这题真正把二分和倍增拉开差距了。如果用二分,每次需要 \(O(n\log n)\) 的时间,那么如果段很小,那么需要 \(O(n^2 \log n)\),如果用倍增,只需要将其拆解成 \(\log\) 段,每段是 \(O(n\log n)\),那么则只需 \(O(n\log^2 n)\),效率远超二分。如果再用二路归并优化,只对新增部分排序,那么可以进一步优化成 \(O(n\log n)\)。
https://www.acwing.com/activity/content/code/content/5464657/
树上
LCA+习题
前4题
P3379 【模板】最近公共祖先(LCA)
https://www.luogu.com.cn/article/oatnrw81
以及总结中的。
CF379F New Year Tree
CF29D Ant on the Tree
纯粹用 LCA 作为工具。
闇の連鎖
结合了环的性质的考察,对于每一条边,分类讨论,然后也是结合了差分算法。
P1084 [NOIP2012 提高组] 疫情控制
最小值问题,考虑二分,然后贪心地让每个军队尽可能往上(使用倍增)。
运输计划
最小值问题,考虑二分,然后根据 \(mid\) 删边,运用树上差分求满足公共要求的路径,对于每个点求子树和,注意求子树和可以利用 dfs
序的逆序。
天天爱跑步
由于每个玩家是一条路径,运用树上差分标记玩家,注意记录的值可以没有意义。
其他技巧
若干点 \(\text{LCA}=\text{LCA}(\text{dfs序}\min, \text{dfs序}\max)\)
总结
线性的倍增
一般记录从位置 \(i\) 往后跳 \(2^j\) 步的信息;
树上的倍增
一般记录从点 \(i\) 往父节点方向跳 \(2^j\) 步的信息;
可以与二分结合,也可能在某些问题的处理上优于二分。
可以与树上的其他知识点,如 dfs
序、差分,用的比较多。
也有的是直接应用,作为工具。