news 2026/4/23 12:31: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/18 1:26:39

多智能体架构实战:LangChain构建高效AI系统的四种模式选择

在这篇文章中&#xff0c;我们将探讨&#xff1a; 多智能体&#xff08;Multi-Agent&#xff09;架构在什么时候变得必要四种主要模式LangChain 如何赋能我们高效地构建多智能体系统 大多数 Agentic&#xff08;智能体驱动&#xff09;任务&#xff0c;最佳实践是从配备精心设…

作者头像 李华
网站建设 2026/4/22 20:24:05

张量(Tensor)深度解析:从标量到高维数组的完整指南

本文深入浅出地讲解张量(Tensor)的核心概念,从最基础的标量、向量、矩阵出发,逐步理解高维张量的本质。配合大量直观的可视化、数学定义和PyTorch/NumPy代码示例,帮你彻底掌握这一深度学习的基础数据结构。 一、什么是张量? 1.1 张量的直观理解 张量是多维数组的通用术语…

作者头像 李华
网站建设 2026/4/20 16:57:37

Altium许可证管理决策支持报告体系

Altium许可证管理决策支持报告体系&#xff1a;企业如何理性选择适合的许可证策略&#xff1f; 作为一个长期从事电子设计自动化&#xff08;EDA&#xff09;行业解决方案设计和技术管理的专业技术人员&#xff0c;我经常会遇到企业客户在选择Altium相关许可证时的困扰。他们不…

作者头像 李华
网站建设 2026/4/16 15:46:51

【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2+基于BERT大模型训练微调+flask+pandas+echarts) 实战(下)

大家好&#xff0c;我是锋哥。最近发布一条【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2基于BERT大模型训练微调flaskpandasecharts&#xff09;高级实战。分上下节。实战简介&#xff1a;前面的2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasec…

作者头像 李华
网站建设 2026/4/19 23:54:25

pyspark分组计数

df.groupBy("content_number").count()参考 pyspark.sql.DataFrame.groupBy

作者头像 李华