2023/4/10总结

news2024/11/23 15:31:38

线段树

线段树是一种二叉树,通俗易懂的来说就是对于一个线段,我们会用一个二叉树来表示。线段树是一种工具,她能把对区间(线段)的修改与维护从0(N)的时间复杂度变成0(logN)。

如图:

在这里插入图片描述

 如上图,我们可以得到一个性质:节点i的权值=她的左孩子的权值+她的右孩子的权值。

 我们知道,一颗从1开始编号的二叉树,节点i的左孩子和右孩子的编号分别是2*i和2*i+1.

 当我们建立一颗线段树时,我们设一个结构体,她一般需要包含三个元素,一个左子树下标,一个右子树下标,还有一个表示这个节点表示的线段和。

建树代码如下:

void build(int i,int l,int r)
tree[i].l=l;tree[i].r=r;
if(l==r)//如果这个节点是叶子节点
{
tree[i].sum=l;
return ;
}
int mid=(l+r)>>1;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
tree[i].sum=tree[i*2].sum+tree[[i*2+1].sum;
}

 需要注意的是我们在构建一颗线段树时,可能需要开好几倍的内存去存储。 

前面说了,线段树的主要功能是对区间进行维护和修改,既然要进行以上的两种操作那肯定要先对这棵树进行查询,在这里我先给出查找某一段区间和的查询方法:

1.查询从根节点开始,依次向下查询

2.如果查询到的这个区间完全包括在要查询的目标区间里面,那么直接返回这个区间的值。

3.如果这个区间的左儿子和要查询的左儿子有交集,那么搜索左儿子。

4.如果这个区间的右儿子和要查询的左儿子有交集,那么搜索右儿子。

5.将搜索到的值依次返回即可。

    int search(int i,int l,int r){
    if(tree[i].l>=l && tree[i].r<=r) 
        return tree[i].sum;
    if(tree[i].r<l || tree[i].l>r)  return 0; 
    int s=0;
    if(tree[i*2].r>=l)  s+=search(i*2,l,r); 
    if(tree[i*2+1].l<=r)  s+=search(i*2+1,l,r); 
    return s;
}

今天只大概了解了线段树的一部分,剩下的明天再深入学习。 

https://blog.csdn.net/weixin_65829986/article/details/130025091 

https://blog.csdn.net/weixin_65829986/article/details/130024647

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

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

相关文章

MYSQL SQL语句优化技术技巧

MySQL是一种流行的关系型数据库管理系统&#xff0c;它提供了各种各样的SQL语句优化技术&#xff0c;下面是一些常见的优化技巧&#xff1a; 1. 使用索引 索引可以大大提高查询性能。在MySQL中&#xff0c;可以使用CREATE INDEX语句在列上创建索引。当查询包含WHERE子句并且…

Google SEO 搜索中心

在公司发展还没有那么成熟的时候&#xff0c;也许你的测试网站是外网可以公开访问的&#xff0c;也许你网站中的机密图片在测试环境&#xff08;不小心上到正式环境&#xff09;却被搜索引擎无情抓取&#xff0c;以及有些内部用户才能使用的网址&#xff0c;你并不想被搜索引擎…

明着呼吁暂停,暗着囤积GPU,马斯克暗度陈仓玩得溜

众所周知&#xff0c;此前马斯克纠集了上千名科技工作者对生成式人工智能的深度训练表示了质疑&#xff0c;呼吁暂停继续对深度人工智能的训练&#xff0c;哪怕先暂停六个月。呼吁的尘埃还没有彻底落地&#xff0c;就传出了马斯克已经悄悄地囤积了上万枚GPU&#xff0c;构建自己…

《花雕学AI》15:BingGPT桌面端——尝鲜体验ChatGPT4.0同源技术新Bing的最新成果

引言&#xff1a; 本文将介绍 BingGPT桌面端的开发背景和目的&#xff0c;以及它与新 Bing 的关系和区别。本文还将说明BingGPT桌面端的主要功能和特点&#xff0c;以及如何下载、安装和使用。最后&#xff0c;本文将评价 BingGPT桌面端对于新 Bing 的人工智能聊天功能的推广和…

dolphinscheduler资源中心

资源中心 资源中心介绍 资源中心提供文件管理&#xff0c;UDF管理&#xff0c;任务组管理。 文件管理可以访问要执行的hive的sql文件 UDF管理可以放置fllink执行的自定义udf函数jar包&#xff0c;hive自定义的UDF函数jar包 以上的*.sql,*.jar文件可以理解为资源&#xff0c…

三本小书的前言

所有的事情既是好事也是坏事&#xff0c;人工智能也不例外&#xff1b;所有的事情既是坏事也是好事&#xff0c;人类智慧也不例外。《追问人工智能&#xff1a;从剑桥到北京》前 言一个地方不在大小&#xff0c;关键看有无灵气&#xff0c;剑桥就是这样一个神奇的地方&#xff…

第三章_Redis的十大数据类型

which 10 官网&#xff1a;https://redis.io/docs/data-types/ 一图说明 提前声明 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串 十大数据类型分别是 redis字符串&#xff08;String&#xff09; String&#xff08;字符串&#xff09;。 string是…

USRP B210同步采集

MIMO Multiple Input Multiple Output的缩写&#xff0c;通过多只天线同时进行收发&#xff0c;增加无线网络基地台的涵盖范围。 MIMO&#xff08;多输入多输出&#xff09;是一项关键的无线技术&#xff0c;它可以将一个传输信号分割成多个流&#xff0c;而这些流则分散地传…

Uni-APP iOS环境打自定义调试基座

一、准备工作 主要操作步骤参考官方文档&#xff1a;https://ask.dcloud.net.cn/article/152 有少量区别。 准备好苹果开发者账号&#xff08;过程略&#xff09;。 二、创建 App IDs 进入网址&#xff1a;https://developer.apple.com/account/resources/identifiers/lis…

我的PID学习历程---PID位置式和增量式

文章目录起因一、什么是开环系统&#xff1f;二、什么是PID&#xff1f;KP&#xff0c;KI&#xff0c;KD三个参数的作用三、PID算法的离散化1、什么是位置式PID&#xff1f;2、位置式PID实现3、什么是增量式PID&#xff1f;4、增量式PID实现四、采用VOFA调试PIDfirewater协议格…

AI绘图网站 MJ(Midjourney) 基础讲解+注册教程

最近有很多伙计在在问如何使用AI作图&#xff0c;MJ当属第一了&#xff0c;不过同样的也是需要魔法才能使用。 是什么&#xff1f; Midjourney是一款高效、准确且免费的AI绘画生成工具&#xff0c;相较于其他同类工具具备更丰富的特色。 先看个成品图&#xff1a; 注册流程 …

【LeetCode每日一题: 375. 猜数字大小 II | 暴力递归=>记忆化搜索=>动态规划 | 区间dp 】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

【react全家桶学习】初始化react脚手架及项目结构讲解

目录 react 脚手架介绍 创建项目并启动 一、全局安装 npm i create-react-app -g 二、切换到想创项目的目录&#xff0c;使用命令:create-react-app hello-react(自定义项目名) 项目结构介绍 主要分析public-->index.html文件 分析src文件夹 项目执行流程 react …

【linux】:老师问什么是爱情,我说了句:软硬链接和动静态库

文章目录 前言一、软硬链接二、动态库和静态库总结前言 上一篇文章的最后我们讲解了文件的inode&#xff0c;那么文件名和inode有什么区别呢&#xff1f;区别就在于linux系统只认inode号&#xff0c;文件的inode属性中&#xff0c;并不存在文件名&#xff0c;而文件名其实是给…

高级篇二、MySQL的数据目录

笔记连接 1、MySQL8的主要目录结构 find / -name mysql1.1 数据库文件的存放路径 MySQL数据库文件的存放路径&#xff1a;/var/lib/mysql/ 1.2 相关命令目录 相关命令目录&#xff1a;/usr/bin&#xff08;mysqladmin、mysqlbinlog、mysqldump等命令&#xff09;和/usr/s…

给我拿三桶水来,实在太干了!!!!!来自腾讯学长爆肝总结的纯干货Java面试手册!!!

前言 23年java的行情懂得都懂&#xff0c;有份对口的工作已经很不错了。但经统计在java行业今年只有百分之30的大学生找到了java工作&#xff0c;剩余的还有百分之70不是在面试的路上就是已经只能被迫转行了&#xff01; 而我们去面试的时候也会被一些面试问题给问到&#xff…

DStream是什么?怎样对DStream进行操作?

DStream的本质 DStream(Discretized Stream)是Spark Streaming提供的基本数据抽象。它表示一个连续的数据流&#xff0c;可以是从源接收到的输入数据流&#xff0c;也可以是通过转换输入流生成的已处理数据流。 DStream由一系列连续的RDD表示&#xff0c;每个RDD都包含来自特…

学习黑客十余年,如何成为一名高级的安全工程师?

1. 前言 说实话&#xff0c;一直到现在&#xff0c;我都认为绝大多数看我这篇文章的读者最后终究会放弃&#xff0c;原因很简单&#xff0c;自学终究是一种适合于极少数人的学习方法&#xff0c;而且非常非常慢&#xff0c;在这个过程中的变数过大&#xff0c;稍有不慎&#…

LONG LIVE KEJU! THE PERSISTENT EFFECTS OF CHINA’S CIVIL EXAMINATION SYSTEM

LONG LIVE KEJU! The persistent effects of China’s civil examination system(Ting Chen et al) – 论文精读 总览方法论 本文研究了古代科举制度对当代人力资本的持续性影响。 本文最值得关注的是工具变量的选取&#xff0c;选取了各县到最近的竹子和松柏产地的最短河流…

归并排序(递归+非递归)

目录一、什么是归并排序&#xff1f;二、归并排序&#xff08;递归&#xff09;三、归并排序&#xff08;非递归&#xff09;一、什么是归并排序&#xff1f; 归并排序&#xff0c;是创建在归并操作上的一种有效的排序算法。算法是采用分治法&#xff08;Divide and Conquer&a…