首页 > 其他 > 详细

线段树

时间:2015-09-06 14:35:34      阅读:208      评论:0      收藏:0      [点我收藏+]

1.建树,递归建树即可,o(n)算法的是什么鬼...;

void build(int l,int r ,int k)              l是左边界,r是右边界,k是线段树中的下标

{

    int m;

    if(l==r){

       t[k].l=l;

       t[k].r=r;

       t[k].n=0;             n是元素的总和,类似的也可以维护别的附加信息;      

       return ;              递归的边界;

     }

     m=(l+r)/2;

     t[k].l=l;

     t[k].r=r;

     t[k].n=0;

     build(l,m,2*k);

     build(m+1,r,2*k+1)

}

然后就是插入或者说更新;插入和更新用同一个函数即可;

感觉好像代码都是相似的,都是要是到达叶节点的时候就搞他,要是没有的话就看看要在左边搞还是在右边搞,要不然就两边一起搞,插入更新的话就要在最后再搞一下然后好像就没有了qwq

今晚再打

 

线段树

原文:http://www.cnblogs.com/20003238wzc--/p/4785274.html

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