首页 > 其他 > 详细

【CH4301】Can you answer on these queries III

时间:2019-02-27 20:36:11      阅读:215      评论:0      收藏:0      [点我收藏+]

区间操作线段树问题。需要维护四个信息:区间和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进入下一层的判断代码不同,不可以写错。

【CH4301】Can you answer on these queries III

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!