倍增

概述

  • 倍增是基于二进制的一种...预处理?思想。

  • 具体来讲,很多时候想要预处理全范围是不可行的,但我们可以利用二进制能简洁地表示出任何数的特性,做步长为二的整数次幂的预处理,然后由它即时计算任意长度的值。(\(O(n^2)-O(1)\to O(n\log)-O(\log)\),复杂度平衡...?)

  • 二分和倍增在某种意义上互为逆。

例题

P4155 [SCOI2015] 国旗计划

  • 题意略。我一开始把题审错了以为是链...另外这里是要接力的,即覆盖的对象是段,而非点,也即接力的两个人必须有交集...

  • 那么先谈谈我的假做法:直接前后缀贪,记录几个能到哪,于是前后二分即可。

  • 然而上环之后我们注意到前后缀这种东西根本不存在:没有起点。

  • 看了 tag 之后...嘛。设法将信息合并,或者说,设法让每个起点利用到其他起点算过的信息,即倍增:\(f_{step,i}\) 表示从 \(i\) 出发走 \(step\) 步最远到哪里。

  • 于是好像问题显然了哦...在倍增数组上二分,呸,二进制拆分即可。

  • p.s.被这道题折磨了好久...这种破环成链乍一看是无限延伸的,保留环的话又会首尾循环(导致可能没在合适的地方停,直接跳过去了),但实际上用复制出来的第二份堵一下就好(指倍增右界)。

CF1237D Balanced Playlist

  • 题意略。和国旗计划差不多...

  • 结合 st 表做一下就好了。有趣的是 st 表是 \(-O(1)\) 的,这是因为它可以...怎么描述呢,过结合?

posted @ 2023-01-15 10:07  未欣  阅读(27)  评论(0编辑  收藏  举报