news 2026/4/18 10:54:53

关于树状数组(略)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于树状数组(略)

查询和修改

long long ask(int x) {//查询a[1]+a[2]+...a[x]的值 long long ret = 0; for (int i = x; i; i -= lowbit(i)) ret += C[i]; return ret; } void add(int x, int d) {//将 x 增加 d for (int i = x; i <= n; i += lowbit(i)) C[i] += d; }

查询是减法,因为分解;修改是加法,因为包含这个数的所有数(范围内)都要随之改变。

注意:

  • lowbit(i)=i & (-i)(保留二进制最低位的1
  • 管辖范围=[i - lowbit(i) + 1, i]
  • 区间长度=lowbit(i)

该结构满足以下性质:

  1. 每个内部节点 c[x] 保存以它为根的子树中所有叶节点的和。
  2. 每个节点x管辖的区间长度 =lowbit(x),范围是[ i−lowbit(i)+1,i ] 。
  3. 除树根外,每个内部节点 c[x] 的父节点是 c[x + lowbit(x)] 。
  4. 树的深度为 O(logN) 。

1.对某个元素进行加法操作
树状数组支持单点增加,意思是给序列中的某个数A[x]加上y,同时正确维护序列的前缀和。根据上面给出的树形结构和它的性质,只有节点x及其所有祖先节点保存的区间和包含A[x],而任意一个节点的祖先至多只有logN个,我们逐一它们的值进行更新即可。下面的代码在O(logN)时间内执行单点增加操作。

void update(int x, int y) { for (; x <= N; x += x & -x) c[x] += y; }

另一种写法

void update(int x, int y) { while(x<=n){ c[x]+=y; x=x+(x&-x); } }

2.查询前缀和
树状数组支持查询前缀和,即序列A第1至x个数的和。按照我们刚才提出的方法,应该求出x的二进制表示中每个等于1的位,把[1,x]分成O(logN)个小区间,而每个小区间的区间和都已经保存在数组c中。下面的代码在O(logN)时间内查询前缀和。

int sum(int x) { int ans = 0; for (; x; x -= x & -x) ans += c[x]; return ans; }

另一种写法

int sum(int x) { int ans = 0; while(x>0){ ans+=c[x]; x=x-(x&-x); } return ans; }

若求sum(7) = c[7] + c[6] + c[4]

3.统计A[x]...A[y]的值
调用以上的sum操作:sum(y) - sum(x - 1)

4.注意事项
要注意树状数组能处理的是下标为1..n的数组,绝对不能出现下标为0的情况,因为lowbit(0) = 0,这样会陷入死循环。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 3:03:02

C++中的委托构造函数

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value)&#xff1a;查找第一个等于 value 的元素&#xff0c;返回迭代器&#xff08;未找到返回 end&#xff09;。find_if(begin, end, predicate)&#xff1a;查找第…

作者头像 李华
网站建设 2026/4/18 8:53:09

大数据领域存算分离:优化数据查询性能

大数据领域存算分离&#xff1a;优化数据查询性能 关键词&#xff1a;存算分离、大数据架构、查询性能优化、存储计算解耦、云原生数据架构 摘要&#xff1a;在大数据时代&#xff0c;数据量呈指数级增长&#xff0c;传统“存算一体”架构因存储与计算资源绑定&#xff0c;常面…

作者头像 李华
网站建设 2026/4/13 14:22:54

SSM毕设项目:基于ssm的智能密室逃脱信息管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/18 8:03:18

分布式系统容错设计

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value)&#xff1a;查找第一个等于 value 的元素&#xff0c;返回迭代器&#xff08;未找到返回 end&#xff09;。find_if(begin, end, predicate)&#xff1a;查找第…

作者头像 李华
网站建设 2026/4/18 8:30:42

我的免费低代码选型笔记!五位搭档让我效率起飞

在推动公司数字化的这几年&#xff0c;我就像一个在工具海洋里寻宝的人。面对五花八门的低代码平台&#xff0c;我最深的体会是&#xff1a;没有最好的&#xff0c;只有最合适的。今天&#xff0c;我想和你分享五位让我印象深刻的“国产搭档”——轻骑兵低代码、JVS低代码、炎黄…

作者头像 李华
网站建设 2026/4/17 19:46:02

2025年SEVC SCI2区,强化灰狼优化算法SGWO+数值优化任务与自动机器学习

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

作者头像 李华