【CH4301】Can you answer on these queries III

区间操作线段树问题。需要维护四个信息:区间和sum,紧靠左侧的最大连续子段和lmax,紧靠右侧的最大连续子段和rmax,区间最大连续子段和dat。

不需要lazy tag,因为只用单点修改,总是要递归到最底层。上传部分:

void up(int ls/*左儿子*/,int rs/*右儿子*/,int fa/*父亲*/)
{
    t[fa].sum=t[ls].sum+t[rs].sum;//区间和相加
    t[fa].lmax=Max(t[ls].lmax,t[ls].sum+t[rs].lmax);
    t[fa].rmax=Max(t[rs].rmax,t[rs].sum+t[ls].rmax);
    t[fa].dat=Max(Max(t[ls].dat,t[rs].dat),t[ls].rmax+t[rs].lmax/*中央部分才有效*/);
}

因为是单点修改,区间查询,所以题目中两种操作x,y的含义不同,change和ask进入下一层的判断代码不同,不可以写错。

原文地址:https://www.cnblogs.com/xzs123456/p/10446589.html