数据结构-线段树

📑前言

本文主要是【线段树】——线段树简单使用的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见

目录

    • 📑前言
    • [1-9]线段树图示
    • 例题
    • 📑文章末尾

[1-9]线段树图示

在这里插入图片描述

例题

1208.小球与盒子

package 难点攻克;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
/*** 线段树一般需要四个函数,build(root,l,n)建树函数,modify(root,x,k)修改函数* query(root,l,r)查询函数,pushup(root)更新函数* 单点修改:修改某个点的值,区间查询,查询某个区间内的值(min,max,sum)* 线段树比树状数组更强大**/
public class 小球与盒子 {static class node{int l,r;long v;}static node tree[];public static void main(String[] args) throws IOException {// TODO Auto-generated method stubStreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));sc.nextToken();int n = (int)sc.nval;sc.nextToken();int m = (int)sc.nval;tree = new node[n*4];build(1, 1, n);//建树while(m-->0) {sc.nextToken();int op = (int)sc.nval;sc.nextToken();int x = (int)sc.nval;sc.nextToken();int y = (int)sc.nval;if (op==1) {modify(1, x, y);//单点修改,单点修改时是x加上y}else {System.out.println(query(1, x, y));//区间查询}}}//建树函数public static void build(int u,int l,int r) {tree[u] = new node();//申请空间if (l == r) {//叶子节点tree[u].l=l;tree[u].r=r;}else {tree[u].l=l;tree[u].r=r;int mid = (l+r)/2;build(2*u, l, mid);//递归左节点,建立左子树build(2*u+1, mid + 1, r);//递归右节点,建立右子树}}public static long query(int u,int l,int r) {if(l <= tree[u].l && r>=tree[u].r) {return tree[u].v;}long res = 0;int mid = (tree[u].l + tree[u].r) / 2;if(l <= mid) {//往左边走,往右边走res = query(u*2, l, r);}if(r > mid) {res += query(u*2+1, l, r);}return res;}public static void modify(int u,int x,long k) {if(tree[u].l == tree[u].r) {tree[u].v += k;}else {int mid = (tree[u].l+tree[u].r)/2;//遍历左右子树,进行单点修改的更新if(x<=mid) {modify(u*2, x, k);}else {modify(u*2+1, x, k);}push(u);//更新u}}public static void push(int u) {tree[u].v = tree[u*2].v + tree[u*2+1].v;}}

📑文章末尾

在这里插入图片描述

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

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

相关文章

将父目录设置为根目录

在用这个这个项目的时候https://github.com/KaiyangZhou/deep-person-reid&#xff0c; 出现了问题 原因是执行python scripts/main.py找不到模块 ModuleNotFoundError: No module named torchreid原因是根目录在当前目录 C:\\Users\\seama\\Documents\\Workspace\\deep-per…

PyCharm Community Edition 2023.3.3,UI界面设置成旧版

File->Settings->Appearance & Behavior->New UI->Enable new UI(取消勾选)->重启PyCharm 旧版UI: 新版UI&#xff1a;

对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解

目录 1、JVM 的类加载机制 1.1、加载 1.2、验证 1.3、准备 1.4、解析 1.5、初始化 2、双亲委派模型 2.1、工作过程 1、JVM 的类加载机制 类加载指的是 Java 进程运行的时候&#xff0c;需要把 .class 文件从硬盘读取到内存&#xff0c;并进行一系列的校验解析的过程。…

人民日报:用好“人工智能+” 赋能产业升级

以下文章来源&#xff1a;北京日报 文生视频、智能家居、智慧工厂……近年来&#xff0c;人工智能发展速度之快、应用范围之广备受瞩目。 政府工作报告提出&#xff0c;深化大数据、人工智能等研发应用&#xff0c;开展“人工智能”行动&#xff0c;打造具有国际竞争力的数字产…

力扣589、590、102、107、429、199、637、515、116、117、104、111、226、101-Java刷题笔记

一、589. N 叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 1.1题目 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09…

6. 互质

互质 互质 互质 每次测试的时间限制&#xff1a; 3 秒 每次测试的时间限制&#xff1a;3 秒 每次测试的时间限制&#xff1a;3秒 每次测试的内存限制&#xff1a; 256 兆字节 每次测试的内存限制&#xff1a;256 兆字节 每次测试的内存限制&#xff1a;256兆字节 题目描述 给定…

使用Python制作自己的wheel文件

平时自己利用Python制作一个个小工具后想分享给别人&#xff0c;但又嫌分享一堆项目代码很麻烦&#xff0c;那么你可以考虑将自己的项目打包成一个wheel文件&#xff0c;别人拿到文件后只需pip install安装即可使用&#xff0c;非常方便。 在上一篇博文中&#xff0c;利用nvid…

在maven多模块之间调用报错

错误信息为&#xff1a;不能解决maven_02_ssm项目的依赖问题&#xff0c;找不到maven_03_pojo这个jar包。 为什么找不到呢? 原因是Maven会从本地仓库找对应的jar包&#xff0c;但是本地仓库又不存在该jar包所以会报错。 在IDEA中是有maven_03_pojo这个项目&#xff0c;所以…

使用 Python 字典向 SQLite 插入数据

将Python字典数据插入SQLite数据库中其实有很多好处&#xff0c;例如使用字典的结构可以简化插入数据的代码&#xff0c;使其更加紧凑和易于理解。这降低了代码的复杂性&#xff0c;并使代码更易于维护。那么在我们日常使用中会有哪些问题呢&#xff1f;一起看看我是如何解决的…

华为配置DHCP Snooping防止DHCP Server仿冒者攻击示例

配置DHCP Snooping防止DHCP Server仿冒者攻击示例 组网图形 图1 配置DHCP Snooping防止DHCP Server仿冒者攻击组网图 DHCP Snooping简介配置注意事项组网需求配置思路操作步骤配置文件 DHCP Snooping简介 在一次DHCP客户端动态获取IP地址的过程中&#xff0c;DHCP Snoopi…

机器学习知识点复习 上(保研、复试、面试)百面机器学习笔记

机器学习知识点复习上 一、特征工程1. 为什么需要对数值类型的特征做归一化&#xff1f;2. 文本表示模型3. 图像数据不足的处理方法 二、模型评估1.常见的评估指标2.ROC曲线3.为什么在一些场景中要使用余弦相似度而不是欧氏距离&#xff1f;4.过拟合和欠拟合 三、经典算法1.支持…

C语言中的面向切面编程(AOP)

概念 首先给出一段由ChatGPT给出的简短的AOP概念&#xff1a; AOP是一种编程方法&#xff0c;用来将在程序中多处重复出现的代码&#xff08;比如日志、权限控制&#xff09;从主要业务逻辑中抽取出来&#xff0c;提高代码的模块化和可维护性。 抽取后的代码会在原始的业务逻辑…

✅ Windows11 系统 I 卡独显 A770 安装 深度学习 Pytorch 环境

&#x1f4cb; 文献参考 这里非常感谢知乎上的 ‘丢丢’ 的[**Windows系统下英特尔独显Pytorch的历程**] 为我提供了一开始的 I 卡安装想法&#xff01;但是文中并未介绍如何进行额外的环境变量操作问题&#xff0c;导致很多软件直接安装至系统盘&#xff0c;占用系统盘空间&am…

网络、UDP编程

1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&#xff08;数据报、流式&#xff09; 网络层 …

gitlab重点知识CI/CD详细步骤说明

介绍 GitHub因其庞大的社区和对开源项目的友好支持而广受欢迎,而GitLab则因其企业级特性和私有仓库的便利性而在企业内部得到广泛应用。 GitLab是一个开源的仓库管理系统,它使用Git作为代码管理工具,并提供了基于Web的服务。 GitLab具有以下特点: 集成了版本控制、持续集…

19.相机,棱镜和光场

一、成像方法 Imaging Synthesis Capture 1.Synthesis&#xff08;图形学上&#xff09;合成&#xff1a;比如之前学过的光线追踪或者光栅化 2.Capture&#xff08;捕捉&#xff09;&#xff1a;把真实世界存在的东西捕捉成为照片 二、相机 1.小孔成像 利用小孔成像的相…

0102全排列和对换-行列式-线性代数

把n个不同的数排成一列&#xff0c;叫做这n个数的全排列&#xff08;排列&#xff09;。 一般情况&#xff0c; 1 , 2 , ⋯ , n 1,2,\cdots,n 1,2,⋯,n是n个数排列的标准次序。 当n个数的任一排列中两个数的先后次序与标准次序不同时&#xff0c;有说有一个逆序。 一个排列中所…

【数据结构】矩阵的压缩存储

矩阵的压缩存储 5.1 普通矩阵的存储 用二维数组存储 分为行优先和列优先&#xff1a; 行优先&#xff1a;优先存放一行的数据。 列优先&#xff1a;优先存放一列的数据。 注意下标是从0还是1开始的&#xff01; 5.2 对称矩阵的存储 对称矩阵定义 若n阶方阵中任意一个元素 a i …

Vue template到render过程

Vue template到render过程 vue的模版编译过程主要如下&#xff1a;template -> ast -> render函数&#xff08;1&#xff09;调用parse方法将template转化为ast&#xff08;抽象语法树&#xff09;&#xff08;2&#xff09;对静态节点做优化&#xff08;3&#xff09;生…

Sqoop “hcatalog does not exist!” 提示信息消除方法

sqoop运行的时候老是有这个报错提示&#xff0c;看着可烦&#xff0c;解决消除一下 解决方法&#xff1a; 1、在$SQOOP_HOME/bin目录下面修改configure-sqoop文件 1&#xff09;进文件夹 cd /training/sqoop-1.4.7/bin2&#xff09;编辑文件 vi /configure-sqoop3&#xff…