码迷,mamicode.com
首页 > 其他好文 > 详细

【技术向】线段树简介(未完成)

时间:2015-08-28 15:35:04      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

线段树(Segment Tree)是一种支持单点修改,区间求和,区间修改,区间求和的树形结构,在oi中有着十分广泛的应用。

    线段树,即每个节点保存一个区间(线段)的相关信息的数据结构,如下图就是一棵线段树

技术分享

 

(貌似大家都推荐用左开右闭的区间存储,但是个人习惯吧…)

 

下面的内容包括

  1. 建树(build)
  2. 单点修改(change1)
  3. 区间求和(query)
  4. Lazy-tag与区间修改(change)

 

 

建树

对于一棵线段树,为了将区间在孩子结点一分为二,设父结点的区间为[a,b],则左孩子为[a,(a+b)/2]右孩子为[(a+b)/2,b],当a=b时,我们称这个结点是一个初始结点,即不能再分的子结点,此时我们便完成了一棵线段树的构造,代码实例如下:

 

void build(St*cur,int l,int r){
    cur->Left=l;cur->Right=r;
    if(l<r){
        cur->lc=new St;
        cur->rc=new St;
        build(cur->lc,l,(l+r)/2);
        build(cur->rc,(l+r)/2+1,r);
    }else
        cur->lc=cur->rc=NULL;

 

【技术向】线段树简介(未完成)

标签:

原文地址:http://www.cnblogs.com/oierforever/p/4766402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!