专栏文章

题解:P13691 [CEOI 2025] highest

P13691题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minz3hrf
此快照首次捕获于
2025/12/02 10:42
3 个月前
此快照最后确认于
2025/12/02 10:42
3 个月前
查看原文
一道倍增好题。
我们把一个答案序列定义成把每一步的代价(1122)拼起来的序列。
考虑把倍增的过程刻画成:判断答案能否超过下一个 2n2^n 的倍数。由于 nn 是从大到小枚举的,所以我们其实只需要判断答案能否超过一个数就可以了。
设我们当前答案是 xx,正在判断能不能跨过下一个 2y2^y 的倍数(x+2yx+2^y)。由于我们可能从 x+2y1x+2y+1x+2^y-1\to x+2^y+1,所以我们只能知道新的答案一定有一个前缀代价和是 x+2yx+2^yx+2y+1x+2^y+1,注意也有可能 x+2yx+2y+1x+2^y\to x+2^y+1,但是这里我们不要求答案不重复,所以没关系。
  • xx+2yx\to x+2^y:直接接一个 2y2^y
  • x+1x+2yx+1\to x+2^y:接一个 2y12^y-1
  • xx+2y+1x\to x+2^y+1:这里我们强制答案没有前缀使得代价为 x+2yx+2^y,所以最后一步必定是 x+2y1x+2y+1x+2^y-1\to x+2^y+1。所以过程为 x2y1x+2y12x+2y+1x\stackrel{2^y-1}{\longrightarrow}x+2^y-1\stackrel{2}{\longrightarrow}x+2^y+1
  • x+1x+2y+1x+1\to x+2^y+1:直接接一个 2y2^y
于是我们只需要维护每个点往后面跳的代价为 2n,2n12^n,2^n-1 时最远能跳到哪个点,很明显的倍增。
倍增的转移:
  • 2n=(2n11)+2+(2n11)=2n1+2n12^n=(2^{n-1}-1)+2+(2^{n-1}-1)=2^{n-1}+2^{n-1}
  • 2n1=(2n11)+2n1=2n1+(2n11)2^n-1=(2^{n-1}-1)+2^{n-1}=2^{n-1}+(2^{n-1}-1)
这里的转移也会有重复的,但我们一样不关心。
注意我们需要知道 [l,r][l,r] 的点跳 xx 步最远能跳到哪。设最优方案是从点 pp 开始跳,那么我们可以证明 pp[l,r][l,r]vv 最大的点或者 ww 最大的点,这里的 vvww 是用 11 或者 22 的代价最远能跳到哪,证明不难。
时间复杂度 O((n+q)logn)O((n+q)\log n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...