动态开点线段树,线段树合并

对于传统线段树,我们都是把区间开满,然后要修改哪个区间,就去找包含那个区间的结点

这样子的话,就会占用很多的内存

而动态开点线段树,就是对于给定的区间[L,R],我一开始是一棵空的线段树,或者说有一个节点(L到R),当我需要插入某个下标为k的数的时候,我再一路创建所表示区间包含k的结点并修改(如果这个结点先前没有被创建的话),从而节省了大量的内存

实现代码如下:

const int N=2E5+10;
#define mid (l+r>>1)
//ls[u]为u的左儿子
//rs[u]为u的右儿子
//sum[u]为u的权值和
int ls[N*40],rs[N*40],sum[N*40];
//我们要开N棵这样子的线段树
int root[N],tot;//利用左右儿子结点由下往上地更新父结点
void pushup(int u){sum[u]=sum[ls[u]]+sum[rs[u]];
}
//u为要修改的结点
//l,r为结点所表示的区间
//p为要查找的下标p
//k为要修改的权值
//这里为单点修改
//区间修改的类似,要修改区间[x,y]的话,把int p换成int x,int y就可以了
void addtree(int &u,int l,int r,int p,int k){//如果该结点先前未被创建的话if(!u){//创建节点u=++tot;}//当递归到了叶子结点,也就是找到了下标p所在的结点if(l==r){sum[u]+=k;return;}//如果没递归到叶子结点//如果p在左半边区间,递归左半边if(p<=mid){addtree(ls[u],l,mid,p,k);}//否则递归右半边区间else{addtree(rs[u],mid+1,r,p,k);}//最后,由于递归更新了u的ls和rs,我们需要用rs和ls来更新一下u的信息pushup(u);
}

对于动态开点的线段树,我们一般会根据不同情况开很多棵这样子的树

最后我们需要将这样子的树合并来统计信息

也就是需要合并线段树

合并的思路很简单

假设合并以x为根和以y为根的两棵树

当我们递归到一个结点,如果x或y在这里没有结点,那么直接搬用对方的结点过来即可(如果双方在这里都没有结点,那么这里就仍然为空节点了)

然后左右子树递归

当我们递归到叶子结点的时候,合并权值

然后自下而上地pushup即可

实现代码如下:

//x,y为要合并的以x为根,以y为根的两棵树
//l,r为x结点与y结点所表示的区间
int merge(int x,int y,int l,int r){//如果有一方为空节点//直接返回另一方即可if(!x||!y){return x+y;}   //递归到了叶子结点if(l==r){sum[x]+=sum[y];return x;}//递归左右子树ls[x]=merge(ls[x],ls[y],l,mid);rs[x]=merge(rs[x],rs[y],mid+1,r);//更新x的信息pushup(x);//返回合并后的根return x;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netdiscover基本使用 - 发现局域网中存活主机

目录 0x00 介绍0x01 常用参数0x02 常用方式1. 主动模式2. 被动模式 0x00 介绍 原理&#xff1a;是一个二层&#xff08;数据链路层&#xff09;的ARP发现工具&#xff0c;执行命令的时候可以通过Wireshark查看是基于arp协议的。在不使用DHCP的无线网络上非常有用。 作用&#…

2024挣大钱的机会来了!入职这一行,也能“一飞冲天”

不知不觉我们已经走过了疫情笼罩的三年。如今&#xff0c;已经全面放开&#xff0c;自12月起核酸检测也将彻底取消&#xff0c;对于我们每个人来说这也将是一场长期的战役。 然而在疫情的常态化下&#xff0c;国民经济也将逐渐恢复。对于我们普通人来说如何抓住机遇&#xff…

南信大尹志聪教授为一作在顶级综合性期刊《Natl. Sci. Rev.》发文:传统梅雨停摆,江南缘何不再多烟雨?

文章简介 论文名称&#xff1a;Traditional Meiyu–Baiu has been suspended by global warming 第一作者及单位&#xff1a;尹志聪(教授|南京信息工程大学大气科学学院) 通讯作者及单位&#xff1a;王会军&#xff08;院士|南京信息工程大学大气科学学院&#xff09; 文章发…

region与AZ可用区区别

背景&#xff1a;云计算的基础设施&#xff0c;由大量的物理服务器和网络构成&#xff1b;为了实现全球快速访问&#xff0c;灾备等需求&#xff0c;这些云基础设施都会部署在不同物理位置&#xff1b; region-区域&#xff1a;指的是云计算所在机房的一个比较大范围的地理空间…

Spring Boot与Spring Cloud Gateway的集成

Spring Boot与Spring Cloud Gateway的集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中集成和使用Spring Cloud Gate…

C++基础编程100题-015 OpenJudge-1.3-13 反向输出一个三位数

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/13/ 描述 将一个三位数反向输出。 输入 一个三位数n。 输出 反向输出n。 样例输入 100样例输出 001参考程序 #include<bits/stdc.h> using namespace std;int main(){int n;cin>>n;cou…

专业,城市,院校,高考填报志愿的三要素怎么排序?

我认为排序方式可以参考&#xff1a; 城市>学校 同样是计算机专业&#xff0c;不论学校的高低&#xff0c;一线城市更容易接触到时代的前端&#xff0c;有更多学习机会&#xff0c;有更好的文化氛围&#xff0c;同样在就业的时候也更容易接触到企业.... 如果要把专业考虑进…

VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例

一、VXLAN概述 1.1 VXLAN的定义 VXLAN&#xff08;Virtual Extensible LAN&#xff0c;虚拟可扩展局域网&#xff09;是一种网络虚拟化技术&#xff0c;通过在现有IP网络上创建虚拟网络&#xff0c;使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术&a…

如何实现系统重装和还原?电脑重装系统的详细介绍(内附系统还原教程)

我们使用电脑办公时&#xff0c;如果出现卡顿、运行缓慢、蓝屏崩溃或病毒感染时&#xff0c;可以通过重装系统的方法来解决。但是电脑系统还原和系统重装都比较麻烦&#xff0c;很多电脑小白跟小编一样&#xff0c;无从下手。 系统重装&#xff1a;重装系统则是将电脑系统完全清…

Docker搭建ELK

docker安装ElasticSearch 创建网络 #这里先创建一个网络&#xff1a;因为我们还需要部署kibana容器、logstash容器&#xff0c;需要让这些容器互联。 docker network create elk-net#查看网络 docker network ls下载ES镜像 #搜索镜像 docker search elasticsearch #下载镜像…

vue3监听器watch以及watchEffect的使用

一&#xff0c;watch()简介&#xff1a; 侦听一个或多个响应式数据源&#xff0c;并在数据源变化时调用所给的回调函数 watch()默认是懒侦听的&#xff0c;即仅在侦听源发生变化时才执行回调函数。 watch()一共有三个参数 第一个参数&#xff1a;侦听器的源&#xff0c;可以为以…

【vue】vue响应式原理

vue响应式原理 vue2的响应式原理 vue2对对象类型的监听是通过Object.defineProperty实现的&#xff0c;给想要实现响应式的数据对象每个属性加上get,set方法&#xff0c;以实现数据劫持的操作。而对数组类型的监听是通过重写数组的方法实现的。 Object.defineProperty的定义…

linux高级编程(进程)(1)

进程&#xff1a; 进程的含义? 进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的调度 进程分类&#xff1a; 1、交互式进程 2、批处理进程 shell脚本 3、 守护进程 进程与程序的区别&#xff1a; 1&#xff09;程序是…

onlyoffice官方文档中打开文件示例的相关测试

文档地址&#xff1a;https://api.onlyoffice.com/zh/editors/open 开发环境&#xff1a; 后端&#xff1a;zdppy_api开发的一个文档服务前端&#xff1a;vue3开发的客户端 我们在index.html中&#xff0c;引入了文档服务的js文件&#xff1a; <!doctype html> <h…

SonarQube集成Jenkins平台搭建

SonarQube平台搭建 一、项目搭建的必要条件 SonarQube 8.9.10 previous LTS 依据公司现有服务目前的Jdk版本1.8&#xff0c;需要选择一个适用的长期支持版本&#xff0c;我在这里选用的是SonarQube 8.9.10 previous LTS。下载地址&#xff1a;Download Previous SonarQube Ver…

HMS最新进展:应用市场覆盖170多个国家和地区,月活超4亿

华为消费者业务在巴塞罗那举行主题为“共联未来”的终端产品与战略线上发布会&#xff0c;除发布多款5G全场景智慧终端新品外&#xff0c;并介绍了华为应用市场及HMS生态构筑最新进展。 应用市场 华为首先介绍了应用市场的最新进展&#xff0c;作为全球前三大应用市场之一&am…

甲骨文(Oracle)云AI专家级证书免费获取攻略

这次分享的是甲骨文云(Oracle)2024年最新最热门的AI专家级证书&#xff0c;活动截止日期7/31。 考试为闭卷监考形式&#xff0c;但小李哥已经把题库准备好&#xff0c;分享给大家。 甲骨文Oracle☁️云计算凭借其Oracle原生产品(数据库、ERP等)在云计算市场中具有一定地位。目前…

jpeg图像压缩技术及改进

一、图像压缩技术的现状 图像压缩编码在数字图像处理中占有重要的地位,将图像压缩的主要目的就在于减小图像的存储容量,以利于信息的保存和传输。此外,它还有利于某些特征的提取,以提高模式识别等的效率。 二、JPEG静止图像压缩的基本原理 编码器负责降低输入图像的编码、像…

常见图像分割模型介绍:FCN、U-Net、SegNet、Mask R-CNN

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【设计模式】【创建型5-1】【单例模式】

文章目录 单例模式懒汉模式饿汉模式双重锁校验的单例模式枚举单例单例模式在实际开发中的应用 单例模式 懒汉模式 /**** 单例 懒汉模式* 使用的时候再创建实例* 线程不安全*/ public class LazeSingle {private static LazeSingle lazeSingle;public LazeSingle() {}public s…