[蓝桥杯学习] 线段树

学习blibli

定义

线段树是一种特殊的平衡二叉查找树,使用线段树,可以实现数据的添加、查找和删除。

树的根结点表示了一个完整的单元区间,左右孩子的区间是将父结点的区间进行二分,左右孩子的区间之和,就是他们的根结点。

叶子结点是区间间隔为1的单位区间(存放的是单个数字),当区间[a,b]的a=b时,就是叶子结点了。

如果用线段树来存储一个区间 [a,b],叶结点的个数就是(b-a+1),并且存储数字从a到b

实现方法

由于线段树是一棵平衡二叉树,可以使用一个数组来实现(虽然不是严格意义上的完全二叉树,但是可以为了实现和使用方便,就看成是一棵完全二叉树,不存在的结点在数组里空着就好)。

区间长度为 [0,5] 的线段树,要用到的数组区间是从 a[0] 到 a[2*5+2],其中一些空间是不存储数据的。

根存储在a[0]

结点 i ,父结点:(i-2)/2,左孩子结点:2*i+1 ,右孩子结点:2*i+2

一个结点的信息包括该结点的 value 以及区间左右端点,通常是不将区间左右端点显示地表示出来,因为可以在查找中计算出来。

应用示例

示例:线段树中,结点值是该区间里的数字个数

如果添加数字3,从区间[0,5] 和 [3,5] [3,4] [3,3]对应的结点值都要加1

代码实现

数据插入

//线段树的数据插入
void tree_inset(int pos,int left,int right,int num)
{
    a[pos]++;  //进行要计算的操作
    if(num == left && num == right) return;  //找到数字所在的叶子
    int mid = (left + right)>>1;
    //把num和mid进行比较
    if(num <= mid) tree_inset(pos*2+1,left,mid,num);  //到左孩子去
    else tree_inset(pos*2+2,mid+1,right,num);  //到右孩子去
}

对叶子的查找类似于二分查找。

查询

//线段树的数据查询
int tree_search(int pos,int left,int right,int num)
{
    if(num == left && num == right) return a[pos];
    int mid = (left + right)>>1;
    if(num <= mid) return tree_search(pos*2+1,left,mid,num);
    else return tree_search(pos*2+2,mid+1,right,num);
}

打印线段树

//打印线段树
void tree_print(int pos,int left,int right)
{
    cout << '[' << left << ',' << right << ']' << ' ' << a[pos] << '\n';
    if(left == right) return;
    int mid = (left+right)>>1;
    tree_print(pos*2+1,left,mid);
    tree_print(pos*2+2,mid+1,right);
    return;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

studio3T mongodb 根据查询条件更新字段 或 删除数据

1. mongodb 等于、不等于$ne、不包含 $nin 以及批量更新数据的使用。 业务场景&#xff1a; 在集合中&#xff0c;根据查询条件&#xff0c;更新数据状态。 实现代码&#xff1a; 1. 部门名称为XXX、状态不等于“完好”的、并且不包含这些编码的数据先查询出来2. 再把状态更…

基于Java+SSM+JSP实现全功能电子商城

&#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩项目推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 基于SpringBoot的旅游网站 基于SpringBoot的MusiQ音乐网站 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及…

解决Android AAPT: error: resource android:attr/lStar not found. 问题

错误信息 /xxx/gjc/.gradle/caches/transforms-2/files-2.1/930c42acd29d295ce5bc495c3b84423e/core-1.9.0/res/values/values.xml:104:5-113:25: AAPT: error: resource android:attr/lStar not found. not found 资源位置 场景 原Android studio中的项目都是在git上面拉的老项…

react-hooks-kit v1 正式发布

evanpatchouli/react-hooks-kit - (npmjs.com) v1.0.0 正式发布&#xff01; 下载安装 npm i evanpatchouli/react-hooks-it -S官方文档 在 Gitee 阅读在 Github 阅读 概览 这是一个无依赖的轻量级 React Hooks 库&#xff0c;总共有 60 hooks。 它包含了一系列易于使用…

端口被占用:Port 8000 was already in use.

一、前言&#xff1a; APPLICATION FAILED TO START Description: Web server failed to start. Port 8000 was already in use. Action: Identify and stop the process that’s listening on port 8000 or configure this application to listen on another port. Proces…

C#,冒泡排序算法(Bubble Sort)的源代码与数据可视化

排序算法是编程的基础。 常见的四种排序算法是&#xff1a;简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显&#xff0c;一般使用递归方式实现&#xff0c;但遇到数据量大的情况则无法适用。实际工程中一般使用“非递归”方式实现。本文搜集发布四种算法…

一致化和一致量纲化问题

归一化/标准化实质是一种线性变换&#xff0c;线性变换有很多良好的性质&#xff0c;这些性质决定了对数据改变后不会造成“失效”&#xff0c;反而能提高数据的表现&#xff0c; &#xff08;1&#xff09;无量纲化 例如房子数量和收入&#xff0c;因为从业务层知道&#xf…

Java:爬虫htmlunit

为什么htmlunit与HttpClient两者都可以爬虫、网页采集、通过网页自动写入数据&#xff0c;我们会推荐使用htmlunit呢? 一、网页的模拟化 首先说说HtmlUnit相对于HttpClient的最明显的一个好处&#xff0c;HtmlUnit更好的将一个网页封装成了一个对象&#xff0c;如果你非要说H…

计算机组成原理18——CPU的结构和功能2(书中重点及习题)

本系列文章是学习了网课《哈尔滨工业大学–计算机组成原理》之后&#xff0c;用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点&#xff0c;如有不同意见&#xff0c;欢迎在评论区讨论。 目录 中断系统中断请求标记和中断判优逻辑中断服务程序入口地…

【教学类-45-01】X-Y之间的三连加题(a+b+c=)

作品展示&#xff1a; 背景需求&#xff1a; 我常去的大4班孩子们基本都适应了0-5之间的加法题&#xff0c;做题速度极快。 为了增加“花样”&#xff0c;吸引幼儿参与&#xff0c;修改参数&#xff0c;从二连加12变为三连加111。 素材准备: 代码重点 代码展示 X-Y 之间的3…

【hcie-cloud】【18】华为云Stack灾备服务介绍【容灾解决方案介绍、灾备方案架构介绍、管理组件灾备方案介绍、高阶云服务容灾简介、缩略词】【下】

文章目录 灾备方案概述、备份解决方案介绍容灾解决方案介绍华为云容灾解决方案概览云容灾服务云硬盘高可用服务 (VHA)VHA组网结构VHA逻辑组网架构VHA管理组件介绍VHA服务实现原理云服务器高可用服务&#xff08;CSHA&#xff09;CSHA物理组网架构CSHA逻辑组网架构CSHA服务组件间…

PLSQL Developer 15安装和oracle客户端安装

文章目录 前言一、PLSQL Developer1.下载2.安装 二、oracle客户端1.下载2.环境变量 三、使用1. oci2. 连接3. 配置文件 总结 前言 oracle是经常使用的数据库&#xff0c;PLSQL Developer是众多产品中比较不错的一款工具&#xff0c;接下来我们来介绍PLSQL Developer的安装和使…

【Filament】基于物理的光照(PBR)

1 前言 自定义Blinn Phong光照模型中实现了基础的自定义光照&#xff0c;与现实的光照还是有些差别&#xff0c;本文将实现更逼真的光照效果&#xff0c;即基于物理的光照&#xff08;PBR&#xff09;。 读者如果对 Filament 不太熟悉&#xff0c;请回顾以下内容。 Filament环…

超维空间M1无人机使用说明书——01、ROS机载电脑使用说明——远程连接

引言&#xff1a;远程连接通常采用两种方式&#xff0c;一种是通过可视化软件&#xff0c;如VNC、Nomachine等&#xff0c;另外一种是使用SSH。各有优缺点&#xff0c;两种远程登录方式的优缺点做一个简单的对比&#xff1a; 1、SSH优缺点 优点:1、消耗网络资源 2、运行稳定 …

Stable Diffusion好用的显卡推荐

Stable Diffusion 是一款顶级的人工智能艺术生成工具&#xff0c;以其快速的性能、用户友好的界面和显着的效果而闻名。然而&#xff0c;在沉浸体验之前&#xff0c;有必要验证您的计算机&#xff08;显卡&#xff09;是否符合最佳功能所需的严格规范。今天我们将介绍三款高性价…

专业级的渗透测试服务,助力航空业数字化安全启航

​某知名航空公司是中国首批民营航空公司之一&#xff0c;运营国内外航线200多条&#xff0c;也是国内民航最高客座率的航空公司之一。在数字化发展中&#xff0c;该航空公司以数据驱动决策&#xff0c;通过精细化管理、数字创新和模式优化等方式&#xff0c;实现了精准营销和个…

olap/spark-tungsten:codegen

15721这一章没什么好说的&#xff0c;不再贴课程内容了。codegen和simd在工业界一般只会选一种实现。比如phothon之前用codegen&#xff0c;然后改成了向量化引擎。一般gen的都是weld IR/LLVM IR/当前语言&#xff0c;gen成C的也要检查是不是有本地预编译版本&#xff0c;要不没…

中通快递查询,中通快递单号查询,批量删除不需要的快递单号

快递单号的管理现在是许多企业和个人日常工作中不可或缺的一部分&#xff0c;面对堆积如山的快递单号&#xff0c;如何快速、准确地处理成了许多人的难题。今天&#xff0c;我们将为大家带来一款强大的快递单号处理软件——快递批量查询高手&#xff0c;让你从此告别繁琐的手动…

1.3学习记录

PCB学习 CH340C有内部晶振&#xff0c;而CH340G无内部晶振&#xff0c;故需要更多的元器件 1.5学习 光储充 光储充&#xff0c;顾名思义&#xff0c;这种一体化充电站的核心由三部分组成——光伏发电、储能电池和充电桩。这三部分组成一个微网&#xff0c;利用光伏发电&…

税法相关的基础知识

文章目录 税法原则1.税法基本原则2.税法适用原则 来和大家聊聊税法相关的基础知识 税法原则 1.税法基本原则 2.税法适用原则