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

线段树分裂 学习笔记

时间:2024-05-26 20:57:37浏览次数:12  
标签:int 线段 mid 笔记 分裂 pushup now

过程

线段树分裂是线段树合并的逆操作,即将一个区间信息分裂到新的树中,新的树一般需要新建。

注意当分裂和合并都存在时,我们在合并的时候必须回收节点,以避免分裂时会可能出现节点重复占用的问题。

时间复杂度显然 \(\mathcal{O}(\log n)\)。

实现

//将 x 分裂出 [p, q] 到 now 上
void split(int &x, int &now, int l, int r, int p, int q){
        if (!x) {
            return;
        }
        
        if (p <= l && r <= q) {
            now = x;
            x = 0;
            return;
        }
        
        if (!now) {
            New(now);
        }

        int mid = l + r >> 1;
        if (p <= mid) {
            split(s[x].l, s[now].l, l, mid, p, q);
        }

        if (q > mid) {
            split(s[x].r, s[now].r, mid + 1, r, p, q);
        }

        pushup(x), pushup(now);
    }

标签:int,线段,mid,笔记,分裂,pushup,now
From: https://www.cnblogs.com/zdrj/p/18214260

相关文章

  • 线段树合并 学习笔记
    过程合并并不困难,对于两棵线段树,合并无疑就是就两棵线段树维护的区间信息进行合并。就比如,有两棵线段树如下图:将第二棵树合并到第一棵树,就是把除了维护\([2,2]\)的全部对应加,而\([2,2]\)则新开节点维护。时间复杂度显然\(\mathcal{O}(n\logn)\)。实现intMerge(i......
  • 【Java笔记】第8章:面向对象的三大特性(封装、继承、多态)
    前言1.三大特性概述2.封装3.继承4.多态结语#include<GUIQU.h>intmain{上期回顾:【Java笔记】第7章:面向对象个人主页:C_GUIQU归属专栏:【Java学习】return一键三连;}前言各位小伙伴大家好!上期小编给大家讲解了Java中的面向对象,接下来讲讲Java中面向......
  • 算法课程笔记——KMP&字符串哈希
    算法课程笔记——KMP&字符串哈希就是模板题aba是前后缀,真前后缀就只有a/b /a避免出现不同字符有相同的值相当于进制如果你能熟练掌握正则表达式,用库还能更快......
  • (阅读笔记)TensorFlow自然语言处理 ((澳)图珊·加内格达拉)
    链接:pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqsoTensorFlow与NLP概述:介绍了TensorFlow框架和NLP的基本概念,以及两者相结合的重要性。TensorFlow基础:详细讲解了TensorFlow的安装、配置以及基本使用方法,为后续的NLP应用打下基础。NLP任务与数据:概述了NLP中的......
  • 深度学习 PyTorch 笔记 (1) :预备知识(张量、线代、微分基础)
    《动手学深度学习》笔记——(1)预备知识(张量、线代、微分基础)教材:https://zh-v2.d2l.ai文章目录1数据操作1.1n维数组与张量1.2初始化1.3访问元素1.5运算2数据预处理2.1创建人工数据集2.2读取数据集2.3处理缺失数据3线性代数3.1标量3.2向量3.3矩阵3.4......
  • 高斯消元学习笔记
    高斯消元学习笔记其实这个主题能够复活主要还是粘了\(\text{LGV}\)引理的光,不然我还不知道高斯消元其实不光能求解线性方程组。求解线性方程组这个只能说是典中典了,我不相信没有一个人的高斯消元不是从这里开始的。我们考虑求解线性方程组的本质:将每一个式子所有未知数前都......
  • Java学习笔记(二)
    Java学习笔记(二)快捷方法生成psvm>>publicstaticvoidmain(String[]args){}main>>publicstaticvoidmain(String[]args){}sout>>System.out.println();i.sout>>System.out.println(i);i.soutv>>System.out.println("i=&......
  • 【精简笔记】JavaScript基础内容大总结
    往期文章目录【精简笔记】JavaScript基础内容第一天【精简笔记】JavaScript基础内容第二天【精简笔记】JavaScript基础内容第三天【精简笔记】JavaScript基础内容第四天【精简笔记】JavaScript基础内容第五天文章目录往期文章目录前言一、JavaScript的书写位置1.......
  • 线段树结构体模板
    线段树是一种维护区间和等功能的数据结构structSegTree{ structnode{ intl,r,sum,len,laz; }tree[N<<2]; inlinevoidpushdown(intu){ intlson=u<<1,rson=lson|1; tree[lson].laz+=tree[u].laz; tree[rson].laz+=tree[u].laz; tree[lson].sum+=tree[lson].len......
  • LGV 引理学习笔记
    \(\text{LGV}\)引理学习笔记\(\text{LGV}\)引理一般用于求解有向无环图中多条不相交路径的方案数,引理内容如下。引理定义\(w(P)\)指的是路径\(P\)上所有边权的乘积(在路径计数问题中认为所有边权均为\(1\)即可),\(e(A,B)\)指的是\(A\toB\)的所有路径的\(w\)和。对......