首页 > 其他 > 详细

线段树合并学习笔记

时间:2019-10-17 09:21:35      阅读:72      评论:0      收藏:0      [点我收藏+]

线段树合并学习笔记

学了一波,其实类似于fhq treap,
直接贴代码吧:

void merge(int &x,int y,int l,int r){
    if(!x||!y){x=x+y; return;}
    int mid=l+r>>1; w[x]+=w[y];
    merge(lc,son[y][0],l,mid),merge(rc,son[y][1],mid+1,r);
}

至于为什么总复杂度是\(O(n log n)\):
在某一机房大佬为我讲解后总算明白了?:
其实线段树合并是O(总结点数)的,但一般开始时每一刻线段树(动态开点)有\(log n\)个节点,便是\(O(n log n)\)的了,
为什么呢?
每次合并,
我们就继承某一线段树没有、另一线段树有的节点,
合并消除共有的节点,(每一次递归消除一个),
所以消除总结点数个,需要同样的递归次数了。
完结撒花。?? ____ / /
?? |>_< | / /
-- --

线段树合并学习笔记

原文:https://www.cnblogs.com/ljk123-de-bo-ke/p/11688871.html

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