前言

近期对线段树合并有了更深的了解,所以在这里写一下一些自己的想法

适用问题

线段树合并有一类经典的模板,现在对于一棵有n个叶子节点的树(Tip:对于一棵nnn个叶子节点的树,其节点数量小于等于2n2n2n,特殊的,我们把只有一个儿子一个父亲的点都先删除),每个叶子节点上都有一个值域为m的值在线段树中,一个非叶子节点节点的线段树由所有子节点的线段树合并而成,求相关的信息

代码

inline node*merge(node*x,node*y)//node为线段树节点的结构体名称
{if(x==NULL&&y==NULL)return NULL;//这一句在这里可能不重要,但当下面两个if里有其它操作的时候就需要加if(x==NULL)return y;//NULL说明该指针为空if(y==NULL)return x;x->lson=merge(x->lson,y->lson);x->rson=merge(x->rson,y->rson);return x;
}

复杂度

对于整棵树,做完的复杂度为O(nlogm+N)O(nlogm+N)O(nlogm+N)
证明:
由于要遍历整棵树,所以有至少的O(N)的复杂度
对于一个叶子节点,其构树的复杂度为O(logm)O(logm)O(logm)。容易发现,两棵线段树合并时,由于如果一棵线段树为空就不做,只有两颗线段树都有值时往下,所以往下dfs的终止节点一定是两棵线段树节点的lca。对于一个节点,做完其子树的线段树合并的复杂度为∑i为线段树上两个叶子节点的lcadepth[i]\sum_{i为线段树上两个叶子节点的lca}depth[i]i为线段树上两个叶子节点的lca∑​depth[i]
(Tip:由于对于两条路径可能会有相交之处,所以这个复杂度是上界,实际上这部分是不满的)
每有一个满足条件的lca,说明有两个值合并在一起了,合并次数为N-1次,而深度是O(logm)O(logm)O(logm)的,所以总复杂度为O(nlogm+N)
证毕

例题

[PKUWC2018][loj2537]Minimax

总结

这是一个很妙的模型,乍一眼复杂度不容易得出,而且比较好写,值得记住

线段树合并复杂度证明相关推荐

  1. BZOJ.2212.[POI2011]Tree Rotations(线段树合并)

    题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...

  2. [集训队作业2018] 三角形(贪心,堆,线段树合并)

    传送门 首先,在结点uuu放上w[u]w[u]w[u]个石子后,出于贪心考虑,下一步一定会把uuu的所有儿子vvv上的石子收回手中. 转换题意: 记cntcntcnt为当下树上的石子数,对每个结点uu ...

  3. jzoj5629 【NOI2018模拟4.4】Map (业界毒瘤仙人掌缩环,线段树合并)

    Description Rin是个特别好动的少女. 一天Rin来到了一个遥远的都市.这个都市有N个建筑,编号从1到N,其中市中心编号为1,这个都市有M条双向通行的街道,每条街道连接着两个不同的建筑,其 ...

  4. 【NOI模拟赛】最小生成树(kruskal算法,线段树合并)

    题面 (一道原创题,我直接扒图了 时限:2s,空间:1GB 题解 为了方便,下文认为 n , m , q n,m,q n,m,q 同阶.同样,不妨给每条边强制定大小,使得不存在两条边边权相等. 有一个 ...

  5. 线段树 java_线段树合并:从入门到放弃(示例代码)

    感谢这篇博客(这里跳转)以及邱宇大神的讲解,我也算作入门(自闭)了. 需要掌握的前置知识点:动态开点线段树.权值线段树. 一.合并思想 线段树合并,就是指建立一颗新的线段树,保存原有的两颗线段树的信息 ...

  6. 线段树合并:从入门到放弃

    感谢这篇博客(这里跳转)以及邱宇大神的讲解,我也算作入门(自闭)了. 需要掌握的前置知识点:动态开点线段树.权值线段树. 一.合并思想 线段树合并,就是指建立一颗新的线段树,保存原有的两颗线段树的信息 ...

  7. 【BZOJ5461】 【PKUWC2018】—Minimax(线段树合并优化dp)

    传送门 发现其实就是左右2棵子树,左儿子选到某个值的概率就是 选最大值的概率∗右儿子的值比它小的概率选最大值的概率*右儿子的值比它小的概率选最大值的概率∗右儿子的值比它小的概率 +选最小值的概率∗右儿 ...

  8. [BJWC2018]Border 的四种求法(后缀自动机+链分治+线段树合并)

    题目描述 给一个小写字母字符串 S ,q 次询问每次给出 l,r ,求 s[l..r] 的 Border . Border: 对于给定的串 s ,最大的 i 使得 s[1..i] = s[|s|-i+ ...

  9. CF1037H Security——SAM+线段树合并

    又是一道\(SAM\)维护\(endpos\)集合的题,我直接把CF700E的板子粘过来了QwQ 思路 如果我们有\([l,r]\)对应的\(SAM\),只需要在上面贪心就可以了.因为要求的是字典序比 ...

最新文章

  1. jQuery 1.9 移除了 $.browser 的替代方法
  2. eclipse:快捷键(补充。。。)
  3. JAVA WEB知识总结之一--responserequest
  4. 泰山200机架服务器包含哪些型号_数据中心机房建设中的关键问题都有哪些?
  5. RabbitMQ集群故障恢复详解
  6. 云上赶年集、品年味,阿里云让云上中国年“春节不打烊”
  7. Apache下的配置文件httpd.conf、httpd-vhosts.conf 转
  8. 将csv文件存入mysql数据库_将csv文件导入到mysql数据库
  9. Caffe学习-手写数字识别
  10. WCF实例上下文以及会话学习
  11. Cocos Shader 图片去色变成灰色
  12. 【Power BI】插入文本框且值为度量值替代方案:创建度量值时自定义文本
  13. 关于amd cpu超频 个人心得
  14. 二十四节气-寒露,月斜寒露白,此夕去留心
  15. SRS之SrsConfig类
  16. 硬盘克隆大师Ghost 8.0技巧从入门到精通
  17. vue实践学习——keep-alive属性及生命周期
  18. Excel表格按行数拆分为多个文件
  19. vue项目实现前端预览word和pdf格式文件
  20. 数据从哪儿来?一些实用的网址

热门文章

  1. 字节输出流写入数据到文件
  2. 用户管理:搭建系统微服务
  3. 实现runable接口创建线程
  4. 静态static关键字修饰成员变量
  5. 垃圾回收机制之复制算法
  6. linux7添加两个网关,RHEL7设置IP地址、网关和DNS
  7. 回调函数自定义传参_10分钟教你手写8个常用的自定义hooks
  8. BootStrap 学习笔记(一)
  9. 初识 JSP---(Servlet映射 / ServletRequest / get与post区别 / 解决乱码)
  10. Anconda安装教程