信息
- ID
- 1661
- 时间
- 5000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
若当前还能吸收某个相邻史莱姆,立刻吸收不会使最优答案变差。
设高桥当前已经覆盖区间 [l,r],大小为该区间元素和 sum;找到左侧最近的 Ai≥sum 和右侧最近的 Aj≥sum,那么两者之间除高桥所在区间外的所有元素都严格小于当前大小,可以整批吸收,随后用前缀和更新 sum。若区间不再扩大便得到该起点的答案。
每次成功扩张至少会使高桥的大小翻倍,因此单个起点至多扩张 O(log∑A) 轮。
用维护区间最大值的线段树在 O(logN) 时间内找两侧最近的不小于给定值的位置,总时间复杂度为 O(NlogNlog∑A),空间复杂度为 O(N)。