求区间最大子段和,重复的数算一次。
主要是用到了一些“历史”信息的技巧。
与 CF997E Good Subsegments 的“子区间”相同,“子段”可以看作前缀的后缀,如果我们能算每一个后缀的最大和,那么我们给它们做一个“后缀后缀最值最大值”就可以了。
先考虑一个后缀的情况。因为相同的数只算一遍,我们在加入一个数的时候,当前维护的后缀和数组只需要在 (pre[i] + 1) 到 (i) 这些位置加上这个数。然后再考虑多个后缀的情况,我们可以线段树上优化“暴力后缀后缀最值最大值”,毕竟每次我们修改区间有限,我们只用在修改区间上更新后缀最大值即可,即记录历史后缀最大值。
还是好好理解一下吧,毕竟还是比较有用的。