树状数组(高级数据结构)-蓝桥杯

news2024/11/16 7:22:39

一、简介

  • 树状数组 (Binary Indexed Tree,BIT),利用数的二进制特征进行检索的一种树状结构。

  • 一种真正的高级数据结构: 二分思想、二叉树、位运算、前缀和。

  • 高效!

  • 代码极其简洁!

二、基本应用

  • 数列a1,a2,....,an,操作:

  • 单点修改:修改元素add(k,x): 把ak加上x。

  • 求和:

sum (x) = a1 + ... + ax

区间和ai + ... + aj = sum(j) - sum(i-1)

三、不修改、只查询

  • 数列aj, a2,..., an,求区间和: ai+ ...+aj

  • 数列是静态的,用前缀和计算区间和,特别高效。

  • 前缀和:sum[i]=a1+...+ ai

  • 区间和: ai+...+aj = sum[j]-sum[i-1]

  • 查询一次区间和,O(1)

  • 代码

  • 如果数列是动态的

  • 修改元素add(k,x):把a加上x。

复杂度O(1)

  • 求区间和:sum(j) - sum(i-1)

复杂度:O(n)--------->效率低

四、动态修改、求区间和: 用树状数组

  • 数列是动态的

  • 修改元素add(k,x):把ak加上x。

  • 求区间和:sum(j) - sum(i-1)

  • 复杂度都是: O(logn)

  • 代码

五、从二叉树到树状数组

六、神奇的lowbit(x)操作

  • 语法:lowbit(x)=x &-x

  • 功能:找到x的二进制数的最后一个1

七、tree[ ]数组

  • 从lowbit(x)推出tree[ ]数组,所有的计算都基于tree[ ],令m =lowbit(x)。

  • 定义tree[x]:把ax和它前面共m个数相加。

  • 例: lowbit(6)=2,有tree[6] = a5+a6。

  • 横线中的黑色表示tree[x],等于横线上元素相加的和。

八、基于tree[ ]的计算

  • 求和sum=a1 +...+ax

利用tree[ ]数组求sum,例如:

sum[8] = tree[8]

sum[7] = tree[7] + tree[6] + tree[4]

sum[9] = tree[9] + tree[8]

  • 以上关系是如何得到的?借助lowbit(x)。

九、sum[ ]的计算

  • 例: sum[7] = tree[7] + tree[6] + tree[4]

(1)从7开始,加上tree[7];

(2) 7 -lowbit(7)= 6,加上tree[6];

(3) 6 - lowbit(6) = 4,加上tree[4];

(4) 4-lowbit(4)= 0,结束。

  • sum()的复杂度?--------->O(logn)------非常好!

十、sum[ ]的更新

  • 更改ax,和它相关的tree都会变化。

  • 例如改变a3,那么tree[3]、tree[4]、tree[8]...都会改变。

  • 影响哪些tree[ ]? 仍然利用lowbit(x)

(1) 更改tree[3];

(2) 3 +lowbit(3)= 4,更改tree[4];

(3) 4 +lowbit(4)=8,更改tree[8];

(4)直到最后的tree[n]。

  • 复杂度?--------->O(logn)------非常好!

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

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

相关文章

微服务架构是什么?微服务架构与SOA的区别

微服务架构定义微服务架构是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担…

Python3 operator 模块

Python3 operator 模块 Python2.x 版本中,使用 cmp() 函数来比较两个列表、数字或字符串等的大小关系。 Python 3.X 的版本中已经没有 cmp() 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含…

从防御者视角来看APT攻击

前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控、检测和缓解技术,并分别进行梳理,介绍分析代表性技术。这一篇分析现有的监控技术。…

多重继承的虚函数表

同一个类,不同对象使用同一张虚函数表 不同类使用不同的虚函数表 子类自己添加的虚函数(非重写),在VS中是将此放在第一个继承类的虚函数表里. #include <iostream> using namespace std;class Father { public:virtual void func1() { cout << "Father::f…

3款强大到离谱电脑软件,都是效率神器,从此远离加班

闲话少说&#xff0c;直接上狠货。 1、ImageGlass ImageGlass是一款值得吹爆的电脑图片浏览工具&#xff0c;使用极其方便&#xff0c;体积50M左右&#xff0c;非常小巧&#xff0c;功能却强大到离谱&#xff0c;ImageGlass打开图片的速度极快&#xff0c;实现快速不同图像间切…

Flink-状态编程(Keyed State、Operator State、Broadcast State、状态持久化和状态后端)

文章目录状态编程Flink 中的状态有状态算子状态的分类按键分区状态&#xff08;Keyed State&#xff09;基本概念支持的结构类型使用基本代码实例-值状态&#xff08;ValueState&#xff09;实例-列表状态&#xff08;ListState&#xff09;实例-映射状态&#xff08;MapState&…

2023年湖北中级职称(工程类建筑类)报名条件和要求是什么?

2023年湖北中级职称&#xff08;工程类建筑类&#xff09;报名条件和要求是什么&#xff1f; 中级职称分为计算机类、医药类、卫生类、教师类、工程类、经济类等各大类&#xff0c;今天主要就是跟大家说一下工程类中级职称评审的一个条件和要求&#xff0c;这也是评职称人员应该…

ASEMI低压MOS管50N06S,50N06S图片,50N06S尺寸

编辑-Z ASEMI低压MOS管50N06S参数&#xff1a; 型号&#xff1a;50N06S 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;60V 栅源电压&#xff08;VGS&#xff09;&#xff1a;25V 漏极电流&#xff08;ID&#xff09;&#xff1a;50A 功耗&#xff08;PD&#xf…

面试一位软件测试6年工作者:一年经验掰成六年来用....

在众多面试中&#xff0c;对于那个工作了6年的面试者&#xff0c;我印象很深刻&#xff0c;因为最开始拿到简历的时候&#xff0c;我一摸:"这简历&#xff0c;好厚啊&#xff01;"再一看&#xff0c;工作6年。 于是我去找了我的领导&#xff0c;我说:“这人我应该没…

linux-rockchip-音频相关

一、查看当前配置声卡状态 cat /proc/asound/cards二、查看当前声卡工作状态 声卡分两种通道&#xff0c;一种是Capture、一种是Playback。Capture是输入通道&#xff0c;Playback是输出通道。例如pcm0p属于声卡输出通道&#xff0c;pcm0c属于声卡输入通道。 ls /proc/asoun…

分析现货黄金价格一般有什么方法

分析现货黄金价格一般有什么方法呢&#xff1f;我相信很多投资者都会说&#xff0c;是技术分析。很多人并不知道技术分析是什么&#xff0c;并且技术分析是如何去分析现货黄金价格的&#xff0c;那么本文就介绍一下技术分析的主要分类。可以说&#xff0c;小编的其他文章都是以…

ASE20N60-ASEMI的MOS管ASE20N60

编辑-Z ASE20N60在TO-247封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为0.4Ω&#xff0c;是一款N沟道高压MOS管。ASE20N60的最大脉冲正向电流ISM为80A&#xff0c;零栅极电压漏极电流(IDSS)为10uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。ASE20N60功耗…

Linux知识之主机状态

1、查看系统资源占用 •可以通过top命令查看CPU、内存使用情况&#xff0c;类似Windows的任务管理器默认每5秒刷新一次&#xff0c;语法&#xff1a;直接输入top即可&#xff0c;按q或ctrl c退出 2、 top命令内容详解 •第一行&#xff1a;top&#xff1a;命令名称&#xff0…

群晖-第2章-设置HTTPS访问

群晖-第2章-设置HTTPS访问 本章介绍如何通过HTTPS访问群晖&#xff0c;前置要求是完成群晖-第1章-IPV6的DDNS中的内容&#xff0c;可以是IPV4也可以是IPV6&#xff0c;或者你有公网IP&#xff0c;直接添加DNS解析也可以。只要能通过域名访问到nas就行。 本文参考自群晖添加SS…

【汽车电子】A核与M核异构通信过程解析

一、 硬件层通信实现原理二、驱动层Virtio下RPMsg通信实现三、应用层双核通信实现方式 现在越来越多的产品具有M core和A core的异构架构&#xff0c;既能达到M核的实时要求&#xff0c;又能满足A核的生态和算力。比如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。…

CSS基础教程

目录 css背景 1.background-color 2.透明度和不透明度 3.使用RGBA的透明度 css背景图片 css背景重复 ​编辑 1.background-repeat 2. background-repeat:no-repeat 3.background-position css背景附着 css边框 1.border-style 边框样式 2.border-width 边框宽度 4…

生物识别技术—景联文科技提供课堂行为采集、reID行为采集、驾驶员行为采集等全类型采集服务!

“随着生物识别技术逐步成熟&#xff0c;其识别准确率大幅提高&#xff0c;应用场景趋向复杂化、多样化&#xff0c;市场规模保持高速增长。据报道&#xff0c;市场研究机构Emergen Research最新发布的一份报告预测&#xff0c;到2027年&#xff0c;全球生物识别市场规模将接近…

MyBatis-Plus——代码生成器(3.5.1+版本)

文章目录配置数据源配置&#xff08;DataSource&#xff09;全局配置&#xff08;GlobalConfig&#xff09;包配置&#xff08;PackageConfig&#xff09;策略配置&#xff08;StrategyConfig&#xff09;模板引擎配置&#xff08;TemplateEngine&#xff09;代码生成器测试样例…

动手学深度学习(第二版)学习笔记 第二章

官网&#xff1a;http://zh.d2l.ai/ 视频可以去b站找 记录的是个人觉得不太熟的知识 第二章 预备知识 代码地址&#xff1a;d2l-zh/pytorch/chapter_preliminaries 2.1 数据操作 2.1. 数据操作 — 动手学深度学习 2.0.0 documentation 如果只想知道张量中元素的总数&#…

jenkins下载与简单使用

1.jenkins下载 因为我仍然使用的是jdk1.8进行开发&#xff0c;所以我下载的是jenkins2.332.1版本&#xff08;jenkins2.346.1版本在2022年末不再支持java8&#xff0c;如果项目使用的是jdk11可以继续使用该jenkins版本&#xff09;&#xff0c;更多版本下载请点击jenkins下载 …