学校里面写这道题的时候洛谷炸了,自己搞出来了。
Part 0
记当前温度为 T T T ,小于等于 T T T 火战士能量和为 f 1 ( T ) f1(T) f1(T) , 大于等于 T T T 冰战士能量和为 f 2 ( T ) f2(T) f2(T) 。
由于能量有剩余的战士会一直战斗下去,此温度下的能量和应该为 2 × min ( f 1 ( T ) , f 2 ( T ) ) 2\times\min (f1(T),f2(T)) 2×min(f1(T),f2(T)) 。
而对于 f 1 ( T ) , f 2 ( T ) f1(T),f2(T) f1(T),f2(T) 的计算,我们将温度作为下标,即为对于温度 T T T 的前缀和 / 后缀和,考虑使用树状数组。
注意到温度 ≤ 1 0 9 \le 10^9 ≤109 而 Q ≤ 2 × 1 0 6 Q \le 2\times 10^6 Q≤2×106 ,将温度离散化。
Part 1
我们枚举温度 T T T ,找到能取到能量最大值的最大温度,时间复杂度 O ( Q 2 log Q ) O(Q^2 \log Q) O(Q2logQ) 。
Part 2
答案应该为随 T T T 的增大的单峰函数,但是由于最大值可能有很多个,三分法不方便实现。
f 1 ( T ) , f 2 ( T ) f1(T),f2(T) f1(T),f2(T) 应该随着 T T