日记

     今天主要算是复习和进一步学习了线段树的相关知识,首先从最基本的单点更新,单线查询(或区间查询)到 区间更新,单点查询(区间查询)。

     一般,这些线段树的问题的建树过程基本类似,在单点更新里,会用到pushpu操作,来利用孩子节点的信息更新本结点信息,但用不到pushdow。但单点查询很少,如果单点查询,树状数组写起来更方便。区间查询,因为当进行查询操作的时候,本区间l,r一定包含需求区间ql,qr,而且有三种情况,1,ql<=l<=r<=qr,这种情况直接返回本结点的查询结果即可,否则,l和r之间包含ql和qr,m=(l+r)/2,  2,当ql<=m,那么就需要查询左孩子(左边有需要更新的信息),3当qr>m,查询右孩子(右边有需要更新的信息)。还有区间修改,当然要用到懒惰标记,既然用到了这个,也需要用到pushdow操作,因为有时需要向下传递懒惰标记。其实,我感觉在区间修改上,懒惰数组才是线段树需要维护的东西,而比如求和的sum数组,只是在维护完结点信息后,或者查询时,更新出来的信息,当然,这个才是答案。

     除了这些操作,还有求最大连续子区间问题,也是区间维护问题,这类问题一般都是维护三个值,最大连续区间长度,最大前缀长度,最大后缀长度。由于是连续区间问题,所以在查询时,比较最大连续区间长度的值,来决定接下来查询左孩子,还是右孩子,还是总区间。至于其他操作,都和一般的线段树区间更新,单点更新的操作几乎一样,但是更加复杂和麻烦,毕竟维护的东西多了。

    还有经典问题,扫描线问题,这类问题的共同特点就是需要建立一个结构体来保存所有的扫描线,维护的根本信息是扫过的边的下位边-上位边,当然还会维护辅助信息,就是x轴的边长之类的东西。更新操作,和基本线段树更新一样,但一般没有查询操作,因为这种题一般都是枚举所有扫描线。

    区间染色覆盖问题,和基本区间查询差不多。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值