贪心那一段真的太难受了。
有两个外卖 i,ji,ji,j,如果 pi≥pjp_i\ge p_jpi ≥pj 且 si≤sjs_i \le s_jsi ≤sj ,说明 iii 这个外卖啥都不如 jjj,直接把 iii 踢掉。这时候 sis_isi 随 pip_ipi 增长而增长了。
我们先考虑如果确定了点外卖次数 xxx 后怎么计算能活多久。
容易发现这个玩意是个贪心,先从最便宜的外卖开始买,直到每次都买到 si−si−1***_i-s_i-1***i −si −1+1 个就不买了,因为再买就会过期,还不如不买。然后计算他能活多久。
然后总不可能枚举 xxx 吧,当我们手动模拟后发现 xxx 和活的时间呈一个单峰函数,而那个最大值就是我们要求的答案。所以可以三分找单峰函数的最大值。
为啥这个是一个单峰函数,下面有一个感性理解:
* 如果点外卖次数多了,可以多买几个便宜点的,但是外卖费可能会很贵。
* 如果点外卖次数少了,一次必须要点很多份外卖,外卖费又要贵起来。
于是我们要合理控制点外卖的次数。
好了可以用我的题解去洛谷交题解了。
注意要开 __int128。