首页 > 其他分享 >线段树合并 学习笔记

线段树合并 学习笔记

时间:2023-05-14 13:35:43浏览次数:27  
标签:log 线段 合并 笔记 times 2m 节点

算法

两棵动态开点线段树,直接把一棵线段树上的信息合并到另一棵树上。

递归合并:

  • 如果某个节点两棵都有,合并,然后递归下去。

  • 否则直接返回节点。

复杂度证明

记权值线段树值域范围为 \(m\),\(n\) 次插入操作。

因为动态开点,一次插入会新增 \(\log_2 m\) 个节点,总节点数 \(n \times \log_2m\)。

因为一棵直接合并到另一棵,合并时间只和重合节点 \(k\) 有关,只会多递归一层,时间最多 \(3 \times k\)。每次合并一个点就会少一个点,合并 \(n \times \log_2m\) 次节点就全没了,时间复杂度 \(\Theta(n \times \log_2m)\)。合并时候不会申请空间,因此空间复杂度也等于插入时的总节点数 \(\Theta(n\times \log_2m)\)。

例题(咕)

标签:log,线段,合并,笔记,times,2m,节点
From: https://www.cnblogs.com/Mysterious-Cat/p/17399160.html

相关文章

  • Java学习笔记7
    ......
  • Java学习笔记2
    数据类型Java是一种强类型语言,必须为每一个变量声明一种类型。在Java中数据类型分为:基本数据类型和引用数据类型。下面讨论Java的8种基本数据类型,4种整型,2种浮点型,1种字符类型char(用于表示Unicode编码的代码单元)和1种表示真值的boolean类型。标识符:就是给类,方法,变量等起的名......
  • Java学习笔记3
    流程控制语句流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构)、分支结构(用到if判断)、循环结构(用到while与for)。顺序结构顺序结构语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行。分支结构......
  • Java学习笔记4
    练习题练习1:机票机票价格按照淡旺季,头等舱和经济舱收费,输入机票原价,月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。importjava.util.Scanner;publicclassHello{publicstaticvoidmain(S......
  • Java学习笔记5
    先休息一下眼睛......
  • Java学习笔记1
    简述Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。语言特性Java之所以被开发,是要达到以下五个目的:应当使用面向对象程序设计方法学应当允许同一程序在不同的计算机平台执行应当包括内建的对计算机......
  • Golang后端研发岗位的面试笔记整理
    今年互联网行情真不太行,暑期实习投了十几家,在经历了各种一面挂和二面挂后,终于在最后拿到了百度的暑期实习offer,真的不容易,中间一度被面试搞得怀疑人生,太难了QAQ这是本人花了点时间整理的一些与Golang后端研发岗位相关的面试笔记,欢迎大家及时补充当然并不局限于Golang研发岗位,......
  • 前端语言串讲 | 青训营笔记
    参考了这篇博客前端语言串讲(万字笔记)|青训营笔记,并加入了一些分析思考课程总结前端语言的基本能力基础的前端三剑客HTML、CSS、JavaScriptHTML(超文本标记语言)HTML是Web页面的基础结构。它用于描述网页的内容和结构。HTML使用一系列标记(称为标签)来定义页面元素,如......
  • C基础笔记
    循环之while语句知道循环次数使用for循环;不知道循环次数,知道试用条件用while循环例:从1+2+3....,加到第多少次后,值大于3033使用for循环实现:#include<stdio.h>intmain(){intsum=0,i;for(i=1;i<=100;i++){sum=sum+i;if(sum==3......
  • C基础笔记(分支语句switch开关语句)
    条件判断之Switch开关语句switch(表达式){ case1: 做值一的事 break;case2: 做是值二的事 break;……default; 如果前面都不是的事}#include<stdio.h>intmain(){ inta; scanf_s("%d",&a); switch(a) { case0: printf("零\n"); break; case1: printf("......