树状数组笔记

这篇具有很好参考价值的文章主要介绍了树状数组笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组、前缀和、树状数组的区别:

        数组:修改某点O(1),求区间O(n)

        前缀和:修改某点O(n),求区间O(1)

        树状数组:修改某点O(logn),求区间O(logn)

树状数组采取折中的方式,降低整体的时间复杂度。

由于算法复杂度取决于最坏的情况的复杂度,所以当数据量很大的时候,树状数组比单独的数组或者前缀和快。


基于二进制

C[x] 为以 x 结尾的,2^k 个单位长度的总和(k为x右侧 0 的个数)

例,x = 8(1000),则 k 为 3,C[x] 为2^3 = 8 个单位长度的总和

树状数组笔记,算法,算法,c++,数据结构,树状数组


lowbit函数:求某二进制从右侧往左侧数,第一个1及其后面的0组成的数

int lowbit(int x){
    return x&(-x);
}

 修改某点

int add(int x,int k){	//x为修改的点,k为增加或减少的值 
	for(int i=x;i<=n;i+=lowbit(i)) a[i]+=k;
}

 查询区间 [a,b] 的和文章来源地址https://www.toymoban.com/news/detail-608186.html

int sum(int x,int y){
	int ans=0;
	for(int i=y;i;i-=lowbit(i)) ans+=a[i];
	for(int i=x-1;i;i-=lowbit(i)) ans-=a[i];
	return ans;
}

到了这里,关于树状数组笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构学习笔记——多维数组、矩阵

    数组是由n(n≥1)个 相同数据类型 的数据元素组成的有限序列,在定义数组时,会为数组分配一个固定大小的内存空间,用来存储元素,数组在被定义后,其维度不可以被改变。 数组在确定其维度和维界后,元素的个数是固定的,所以不能进行插入和删除运算。数组中最常

    2024年02月03日
    浏览(49)
  • 数据结构与算法(一): 稀疏数组

    在五子棋游戏或类似的游戏中,我们可以把整个棋盘想象成是一个有规律的二维数组,其值由0、1、2三个数字组成,0代表空白区域,1代表白子,2代表黑子。这种情况:即当一个数组中大部分元素为0或者为同一值时,存储该数组数据可以使用稀疏数组来对原始数组进行精简,

    2024年02月11日
    浏览(47)
  • 数据结构与算法 | 数组(Array)

    数组(Array)应该是最基础的数据结构之一,它由相同类型的元素组成的集合,并按照一定的顺序存储在内存中。每个元素都有一个唯一的索引,可以用于访问该元素。 数组索引(Index): 数组中的每个元素都有一个唯一的整数索引,从0开始计数。索引用于访问数组中的元素

    2024年02月08日
    浏览(51)
  • JavaScript数据结构与算法整理------数组

            数组的标准定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量 ,几乎所有的编程语言都有类似的数据结构,而JavaScript的数组略有不同。         JavaScript中的数组是一种特殊的对象,用来表示偏

    2023年04月24日
    浏览(62)
  • 数据结构与算法-数组(附阿里面试题)

            给你一个文件里面包含全国人民(14亿)的年龄数据(0~180),现在要你统计每一个年龄   有多少人?          给定机器为 单台+2CPU+2G内存。不得使用现成的容器,比如map等。 (这一句可以忽略)         在以上情况下你该如何以最高效的方法来解决这个

    2024年02月13日
    浏览(37)
  • 【数据结构和算法】寻找数组的中心下标

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列长度 2.1.4 寻找数组中第 k 小的元素 2

    2024年02月04日
    浏览(53)
  • 【数据结构和算法】使用数组的结构实现链表(单向或双向)

    上文我们通过结构体的结构实现了队列 、以及循环队列的实现,我们或许在其他老师的教学中,只学到了用结构体的形式来实现链表、队列、栈等数据结构,本文我想告诉你的是,我们 可以使用数组的结构实现链表、单调栈、单调队列 目录 前言 一、用数组结构的好处 1.数

    2024年01月20日
    浏览(74)
  • 【数据结构与算法——TypeScript】数组、栈、队列、链表

    解决问题 的过程中,不仅仅 数据的存储方式会影响效率,算法的优劣也会影响效率 什么是算法? 定义: 🟢 一个有限指令集,每条指令的描述不依赖于言语 (编写指令:java/c++/ts/js) 🟢 接收一些输入(有些情况下不需要输入)(接收:排序:无序数组) 🟢 产生输出 (

    2024年02月14日
    浏览(38)
  • 【数据结构】24王道考研笔记——栈、队列和数组

    基本概念 栈是 只允许在一端进行插入或删除操作 的线性表。 栈顶:线性表允许进行插入删除的那一端 栈底:固定的,不允许进行插入删除的那一端 空栈:不含任何元素的空表 特点: 先进后出 基本操作: 常考题型: [外链图片转存失败,源站可能有防盗链机制,建议将图片

    2024年02月09日
    浏览(70)
  • 数据结构与算法·第5章【数组和广义表】

    两种顺序映象的方式: 以行序为主序(低下标优先); 以列序为主序(高下标优先)。 而 n n n 维数组: LOC(x1, x2, ..., xn) = LOC(0, 0, ..., 0) + [(x1 × b1 + x2) × b2 + x3] × b3 + ... + xn 数据类型定义 其中: A.bounds是每一维可以放多少元素: a[A.bounds[0]][A.bounds[1]][A.bounds[2]]…… A.constants是指向每

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包