Gracekite's Homepage

Back

虽然说这题题意还是比较好懂的,但我代码调了好久。

题意#

选取一个最合适的温度,使得

的值最大。如果有多个能使价值最大,则选最大的。

分析#

首先由题意我们知道,对于来说,我们得到的是一个递增序列。对于来说,我们得到的是一个递减序列。把两个序列合起来,我们可以得到一个单峰曲线。 那么我们很容易想到我们用二分选取最优温度。

然后呢?

我就在这里卡死了,万能的题解给出了一个不错的解法 —> 我们找到的能量小于的能量的最高温度,那么一定有,在这个时候我们再找到一个,使,那么答案就是

很有道理,于是 开始打代码 又偷瞄了一眼题解,发现前车之鉴只能拿,于是看到了解决方案

显而易见 我们可以用一种直接在树状数组上二分(倍增)的做法,加上吸氧即可通过本题!

为什么可以倍增呢?
如果我们现在在位置,我们在树状数组上倍增的时候,跳的步长递减如,而我们知道,树状数组一个点上存储的是上的所有信息,那么我们最不用重新算前后缀和,直接将上点的信息加起来即可。

具体看代码实现。

AC Code#

LG6619-[省选联考 2020 A/B 卷] 冰火战士题解
https://betteroier.github.io/blog/lg6619-%E7%9C%81%E9%80%89%E8%81%94%E8%80%83-2020-a-b-%E5%8D%B7-%E5%86%B0%E7%81%AB%E6%88%98%E5%A3%AB%E9%A2%98%E8%A7%A3
Author Yuxuan Zheng
Published at August 8, 2023