题目大意
求一段序列的最大子段和,并随时在线修改查询。
分析
对于线段树的每个节点维护几个信息: s , m x , l x , r x s,mx,lx,rx s,mx,lx,rx。分别代表区间和,区间最大子段和,从区间左端点开始的最大子段和,到区间右端点结尾的最大子段和。
如果用k表示当前区间, l s o n , r s o n lson,rson lson,rson表示左右区间,可以得到转移公式:
s [ k ] = s [ l s o n ] + s [ r s o n ] s[k]=s[lson]+s[rson] s[k]=s[lson]+s[rson]
因为最大字段和要不全在左区间,要不全在右区间,要不两边都有,取最大值:
m x [ k ] = m a x ( m x [ l s o n ] , m x [ r s o n ] , r x [ l s o n ] + l x [ r s o n ] ) mx[k]=max(mx[lson],mx[rson],rx[lson]+lx[rson]) mx[k]=max(m</