1 条题解
-
0
最大子数组题解
思路
先处理 :把 取反,同时把 改为 ,就等价于交换“加”和“减”的位置,此后可设 。
考虑最终选中的某个子数组,设长度为 。为了使它的和最大,应尽量把加 的位置放在子数组内,因此其中有 个位置加 。该子数组的最优贡献为原和加上
当 时,这等于在每个元素上加 后求长度不超过 的最大子数组;当 时,这等于在每个元素上减 后求长度不少于 的最大子数组,再加 。
做法
分别建立 与 的前缀和。
- 对长度不超过 的部分,维护当前右端点前最近 个前缀和的最小值,可用单调队列完成。
- 对长度不少于 的部分,随右端点推进维护下标不超过 的最小前缀和。
两部分与空子数组答案 取最大值。
复杂度
每组测试的时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1196
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者