李超线段树.
- 如果没有秒杀,就是个简单的贪心.算出第 $i$ 个敌人需要攻击的次数 $T_i$ ,考虑在攻击顺序中,交换两个相邻敌人带来的影响.
- 容易发现按照 $\frac {T_i} {A_i}$ 从小到大排序就可以了.
- 现在可以秒杀两个敌人,先按照 $\frac {T_i} {A_i}$ 从小到大排个序.但肯定不能贪心秒杀前两个.因为原来是考虑了击杀时间,而秒杀没有击杀时间.可以随意举出反例.
- 考虑秒杀 $i,j(i<j)$ 时,答案会减少的值.记 $preT,sufA$ 分别表示 $T$ 的前缀和, $A$ 的后缀和.贡献就有 $i,j,[i+1,j-1],[j+1,n]$ 这四段.
- 发现如果固定 $i$ ,那么就是要求 $-A_j\cdot T_i+b_j$ 的最大值,其中 $b_j$ 是可以预处理的,是仅和 $j$ 有关的一个量.
- 那么就是求 $x=T_i$ 这条直线与 $j>i$ 的这些直线 $(-A_j,b_j)$ 交点纵坐标最大值.枚举 $i$ 时从大到小,就只需要维护加入直线和询问这两个操作.用李超线段树维护一下就可以了.
1 |
|