zoukankan      html  css  js  c++  java
  • 关于线段树

    给你一个数列A,要支持两个操作:

    1.第x个数加v

    2.求x到y这个区间的和

    不要用树状数组做,用线段树。

    线段树比树状数组看起来美观一点,它长这样。

    它有两种存储方式:

    1.动态存储,使用指针,struct

    2.静态存储,直接用数组,下表遵循左儿子乘2,右儿子乘2加1的规则。

    特别提醒:用Cena评测的时候,不要使用动态存储,它分两种:

    1.提前全new出来,一种是一个new一个,它的写法也分内存池和现new。

    构造:

    update:

     

    点修改:

    区间查询:

    区间修改:

    date[now]记录的是已经对当前点做过的,但是还没有对当前点的儿子做过的操作。

    在每一次修改/查询之前,调用pushdown(now,l,r,mid)函数,下放标记

    模拟一下过程

    区间修改:

    关于打标机要注意,明确delta含义,不要忘记pushdown

    总结:线段树最重要的两个过程是:pushdown和update

    线段树的一个隐藏的重要过程——change和pushdow时都要进行修改。

    所有修改函数,最后都要update,所有函数,开始都要pushdown。

    关于例题,codevs,洛谷啊什么的都有模板题。

    大家可以去做一下。

    一世安宁

  • 相关阅读:
    Android中开发习惯
    Activity、Window和View三者间的关系有一定的见解
    Android底层有一定的认识,研究过相关的Android源码
    安卓工程的启动过程
    OAuth2认证有一定的了解
    屏幕适配经验
    NOIP模拟赛14
    NOIP模拟赛13
    NOIP模拟赛12
    NOIP模拟赛11
  • 原文地址:https://www.cnblogs.com/GTBA/p/9451594.html
Copyright © 2011-2022 走看看