转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526 by---cxlove
题目:求出区间的最大子段和,而且相同的数只能计算一次
http://www.spoj.pl/problems/GSS2/
嘛~~~这个题还是很不错的,不会,哭~~~~喵
在线的处理不了,只能离线处理
按询问区间的右端点排序,然后依次枚举a[i],pos[a[i]]表示对于数字a[i],上一个位置在哪
那么只需要将pos[a[i]]与i之间的部分全部加上a[i]
当查询的右区间为当前更新的位置的时候,查询便是历史区间最值。
但是实现起来并不简单~~~
维护4个值:old_cover 历史最大更新 old_max 历史最大值
now_cover 当前的更新值 now_max 当前区间的最大值
具体的看代码吧,各种纠结,尤其是Push_Down部分
#include
#include
#include