[ 联合省选 2020 A | B ] 冰火战士 题解

题目

学校里面写这道题的时候洛谷炸了,自己搞出来了。

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 Q2×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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值