首页 > 其他分享 >[DS 小计] 线段树合并

[DS 小计] 线段树合并

时间:2024-04-08 17:14:13浏览次数:17  
标签:标记 线段 合并 小计 DS 二叉树 节点 复杂度

引入

现在你有很多棵二叉树。
二叉树的节点总和是 \(n\) 。
现在,你要把它们合并。
怎么做呢?
实际上,写的好是可以 \(O(n)\) 完成的。

前置题目 1

给出 \(2\) 棵二叉树,合并两棵二叉树。

怎么做呢?
很容易的暴力,遍历每个点,合并即可。

合并我们进行以下分类讨论:

  • 如果现在 \(u\) , \(v\) 中任意一左子树/右子树为空,直接接上去即可。
  • 否则,递归处理。

这样时间复杂度是重复节点个数。

好像没什么用的样子

前置题目 2

给出 \(n\) 棵二叉树,合并 \(n\) 棵二叉树。节点总数为 \(m\) 。

其实很简单,我们按照上面合并两棵的思路,暴力合并即可。
为什么这样可行呢?时间复杂度不会炸吗?

我们来分析时间复杂度。
那么,我们合并两棵线段树的时间复杂度是确定的。
我们可以理解为,合并后的两个节点,我们删除了其中一个。
也就是说,我们给其中一个打上了标记。
显然,每个节点至多被打上一次标记
所以时间复杂度是 \(O(m)\) 的。
复杂度的情况保证是不会重复合并两次二叉树。

正题

线段树合并和二叉树合并思想一致。
只是线段树要维护信息。
只需要这样做:
先下方当前节点的标记,然后往下递归合并。
这样我们能保证合并时的两个点没有标记,是正确的。
然后因为你已经下好标记了,然后更新左右子树,子树也是下方好标记/更新了的,直接上传标记(Pushup)即可。

所以,合并时间复杂度是总的点数。
这样就做完了。
具体的,到了叶子节点请特殊处理处理即可。

然后就做完了,完结撒花。

标签:标记,线段,合并,小计,DS,二叉树,节点,复杂度
From: https://www.cnblogs.com/g1ove/p/18121733

相关文章

  • R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
    全文链接:https://tecdat.cn/?p=35691原文出处:拓端数据部落公众号分析师:QingLi在生物学和医学研究中,乳腺发育是一个复杂而精细的过程,涉及众多基因的表达调控。近年来,随着高通量测序技术的发展,RNA测序(RNA-seq)技术已经成为研究基因表达模式的有力工具。通过RNA-seq技术,我们可以获......
  • P4143PyramidSequences
    数学等价于在一个\(n\timesm\)的矩形中做弹球,问经过的整点个数\(t=gcd(n,m)\),将\(n,m\)分别除掉\(t\),得到\(n',m'\)此时会有\(n'm'\)条线段,每条线段经过\(t\)个整点,另外还有\(\lceil\frac{(n'+1)(m'+1)}{2}\rceil\)个交点所以最终答案为\[\lceil\frac{(n......
  • 蓝桥杯—DS1302
    目录1.管脚2.时序&官方提供的读写函数3.如何使用读写函数4.如何在数码管中显示在DS1302中读取出的数据?1.管脚2.时序&官方提供的读写函数/* # DS1302代码片段说明 1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。 2. 参赛选手可以自行编写相关代码或......
  • [DS 小计] 线段树分治
    很简单的一个小trick。就看能不能想出来。思考我们学过CDQ分治。CDQ分治的思想是把时间切割,询问截断点后面的问题,预处理截断点前面的贡献。这是把问题和修改放在一起的。那么,假设修改很难撤销怎么办?这时候就可以用线段树分治做到只增不删。有点类似回滚莫队。算法直......
  • Codeforces 1906H Twin Friends
    考虑到\(N\)的字符组成其实是固定的。所以可以把方案数拆为\(A\)的方案数\(\times\)\(A,B\)相匹配的方案数。对于\(A\)的方案数,就是多重集组合数,为\(\dfrac{n!}{\prod\limits_{i=0}^{25}(cnt_{A,i}!)}\)。接下来考虑求解\(A,B\)相匹配的方案数。考虑到对于......
  • 【51单片机入门记录】RTC(实时时钟)-DS1302应用
    目录一、DS1302相关写函数(1)Write_Ds1302(2)Write_Ds1302_Byte二、DS130相关数据操作流程及相关代码(1)DS1302初始化数据操作流程及相关代码(shijian[i]/10<<4)|(shijian[i]%10)的作用:将十进制转换为BCD码。代码呈现(2)DS1302获取数据操作流程及相关代码代码呈现三、应用举例-......
  • DS2500 Python实践问题
    2024年春季Python分级指南在DS2500中,您将有一个项目、实验室、家庭作业和Python实践问题(PPP),所有这些都有助于您的成绩。对于这项工作中的一些,你的分数将完全基于正确性,而对于其他工作,你的编码/可视化风格将发挥重要作用。正确性:实验室和PPP实验室和购买力平价是自动评分的,如果自动......
  • 国产芯片LHE7908可代替ADS1298
    8通道24位ADS1298是完全集成的模拟前端(AFE)系列中的首款产品,适用于病患监控、便携式和高端心电图(ECG)及脑电图(EEG)设备。而作为可以代替ADS1298的模拟前端芯片LHE7908,其功能芯片性能已经达到国际先进水准,可以完美替代ADS1298甚至优于,是目前国内极少能够通过医疗测试的国产......
  • 每日一题 第六十五期 洛谷 线段树1
    【模板】线段树1题目描述如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数加上kkk。求出某区间每一个数的和。输入格式第一行包含两个整数......
  • [DS 小计] 树套树
    笔者很菜,只会最简单的树状数组套权值线段树。不是,这玩意不就套娃吗,真ex啊题目简要:求\(x\)排名求排名为\(x\)的数求\(x\)前驱后继我们学了权值动态开点线段树就知道这些问题乱写就行了。但是套上\([l,r]\)区间呢,无修呢?我们会主席树这些乱写就行了。但是套上有......