线段树入门

今天看了一天的线段树,寒假写过,但是寒假连区间更新里的lazytag都没有理解,也不知道当时写的什么鬼了。
重要操作:

  • 单点更新
  • 单点查询
  • 区间更新
  • 区间查询

主要关于lazytag,其实就是一个标记,我理解的是,标记此区间已经计算正确,但是子区间的值还未更新,
所以最好在区间查询和更新时都下推一下tag。下推tag时的操作和具体题目有关。

题目:

  • HDU - 1754 题解
    (单点更新,区间查询)

  • HDU - 1698 题解
    (区间更新)

  • POJ - 3468 题解
    (区间更新,区间查询)

  • ZOJ - 1610 题解
    (区间更新)

  • HDU - 3308 题解
    (区间更新)

  • POJ-2528 题解
    (区间更新+离散化) 代码还有点问题

  • POj - 3264 题解
    (无更新,纯区间查询) 所以又看了看RMQ的ST算法。

  • HDU - 1255 题解
    (扫描线 求面积)

  • POJ - 1177 题解
    (扫描线求周长)

  • HDU-1542 题解
    (扫描线求面积)

来写一个小总结吧,毕竟还要刷别的题,最近又要考组原了,害怕组原挂给我看。

线段树现在最主要是明白自己到底维护的是个怎样的值。
怎样根据左右儿子来更新父结点,还有lazytag到底是表示的什么,是表示此区间更新的次数,还是是否更新过。

有些题如果查询次数特别少,可以直接在更新时一直打tag,最后一遍推完,例如有些染色的题目。

注意build的时间复杂度是O(n) 。

关于扫描线:
很好的博客
我觉得这个博主讲的特别好,之后脑子清醒来捋一捋扫描线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值