SP1557 GSS2 - Can you answer these queries II

求区间最大子段和,重复的数算一次。

主要是用到了一些“历史”信息的技巧。

CF997E Good Subsegments 的“子区间”相同,“子段”可以看作前缀的后缀,如果我们能算每一个后缀的最大和,那么我们给它们做一个“后缀后缀最值最大值”就可以了。

先考虑一个后缀的情况。因为相同的数只算一遍,我们在加入一个数的时候,当前维护的后缀和数组只需要在 \(pre[i] + 1\)\(i\) 这些位置加上这个数。然后再考虑多个后缀的情况,我们可以线段树上优化“暴力后缀后缀最值最大值”,毕竟每次我们修改区间有限,我们只用在修改区间上更新后缀最大值即可,即记录历史后缀最大值

还是好好理解一下吧,毕竟还是比较有用的。

posted @ 2020-07-27 07:56  JiaZP  阅读(91)  评论(0编辑  收藏  举报