专栏文章
题解:P13691 [CEOI 2025] highest
P13691题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minz3hrf
- 此快照首次捕获于
- 2025/12/02 10:42 3 个月前
- 此快照最后确认于
- 2025/12/02 10:42 3 个月前
一道倍增好题。
我们把一个答案序列定义成把每一步的代价( 或 )拼起来的序列。
考虑把倍增的过程刻画成:判断答案能否超过下一个 的倍数。由于 是从大到小枚举的,所以我们其实只需要判断答案能否超过一个数就可以了。
设我们当前答案是 ,正在判断能不能跨过下一个 的倍数()。由于我们可能从 ,所以我们只能知道新的答案一定有一个前缀代价和是 或 ,注意也有可能 ,但是这里我们不要求答案不重复,所以没关系。
- :直接接一个 。
- :接一个 。
- :这里我们强制答案没有前缀使得代价为 ,所以最后一步必定是 。所以过程为 。
- :直接接一个 。
于是我们只需要维护每个点往后面跳的代价为 时最远能跳到哪个点,很明显的倍增。
倍增的转移:
- ;
- 。
这里的转移也会有重复的,但我们一样不关心。
注意我们需要知道 的点跳 步最远能跳到哪。设最优方案是从点 开始跳,那么我们可以证明 为 中 最大的点或者 最大的点,这里的 和 是用 或者 的代价最远能跳到哪,证明不难。
时间复杂度 。
代码。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...