树状数组学习

news/2026/1/17 12:12:53/文章来源:https://www.cnblogs.com/KeyuanTechno/p/19495448

树状数组是一种高效的存储方式,可以在nlogn时间内完成数据的更新与查询,下面给出树状数组的c++实现与使用。
首先,树状数组每一位存储的数据是原数组[x-lowbit(x)+1, x]上的总和,其中lowbit(x)是指x二进制最低1位对应的值,如(6)10 = (110)2,其二进制最低1位是第1位,故lowbit(6) = (10)2 = 2。其实现为:
int lowbit(int x) return x & (-x);

树状数组构建如下:

  class FenwickTree{private:vector<int> tree;int n;int lowbit(int x) return x & (-x);public:// 下面是构建FenwickTree(int size){n = size;tree.resize(n+1, 0);}  // 构建空的树状数组FenwickTree(const vector<int>& arr){n = arr.size();tree.resize(n+1, 0);for(int i = 0; i < n; i++) update(i+1, arr[i]);}  // 依据已有的数组构建树状数组,,从1开始到第n位存储,第0位是0,效率为nlognvoid update(int i, int value){while(i <= n){tree[i] += value;i += lowbit(i);}}// 下面是查询与修改int query(int i){int sum = 0;while(i > 0){sum += tree[i];i -= lowbit(i);}return sum;}  // 查询到第i位前缀和int rangeQuery(int l, int r){if(l > r) return 0;  // [l, r]无定义return query(r) - query(l-1);  // 差分}  // 查询[l, r]上总和int get(int i){return query(i) - query(i-1);  // 差分}  // 查询原数组第i位的值int set(int i, int value){int oldValue = get(i);update(i, value - oldValue);}}

解释:
1.构建中,update函数会把所有包含arr[i]的tree对应位加上arr[i],其中通过i += lowbit(i)跳转到下一区间
2.查询中,通过i -= lowbit(i)跳回到上一个没有公共区间的相邻区间,从而获取i到开头的和
3.rangeQuery和get依据差分实现
4.set(i)中,会计算和原来值的差值,将差值加到所有包含arr[i]的tree相应位置上

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

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

相关文章

如何修改exe文件?工具选择与风险详解

修改可执行文件&#xff08;exe&#xff09;是一项需要谨慎对待的技术操作&#xff0c;通常涉及到软件调试、本地化或特定功能调整。这并非简单的文本编辑&#xff0c;而是对二进制代码和数据的直接干预&#xff0c;要求操作者对Windows PE文件格式和汇编语言有基本了解。未经授…

js typeof eval 结果是啥?为什么是 function 解释

typeof运算符和eval函数是JavaScript中两个重要但容易误解的特性。typeof用于检测变量的数据类型&#xff0c;而eval则能够执行字符串形式的JavaScript代码。理解这两者的特性和相互关系&#xff0c;对于编写安全、高效的JavaScript代码至关重要。 typeof eval返回什么结果 在J…

threadlocal session详解:作用与使用指南

在Java Web开发中&#xff0c;threadlocal session是一种常见的设计模式&#xff0c;它利用ThreadLocal为每个线程提供独立的会话存储空间。这种方法能有效隔离不同线程间的数据&#xff0c;避免并发访问冲突&#xff0c;尤其适合管理用户登录状态、事务上下文等需要线程安全的…

为什么AI生成的测试用例总能发现“逻辑漏洞“?

一、传统测试的认知茧房与AI的破壁利器在软件测试领域&#xff0c;逻辑漏洞如同潜伏在代码深处的幽灵。传统测试方法依赖测试工程师的经验积累与需求文档推导&#xff0c;这种基于确定性的测试设计存在三重天然局限&#xff1a;路径依赖陷阱人类测试者容易陷入"需求文档即…

扫频信号 (Sweep/Chirp Signal) 原理与应用

目录 前言 1. 什么是扫频信号&#xff1f; 2. 直观理解&#xff1a;与普通正弦波的区别 3. 常见分类 4. 核心作用&#xff1a;为什么要用扫频信号&#xff1f; 5. 项目实战分析 (结合 FPGA/C 代码) 6. 总结 前言 本文旨在记录扫频信号&#xff08;Chirp&#xff09;的时…

【Java毕设全套源码+文档】基于springboot的形成性考核管理系统设计与实现(丰富项目+远程调试+讲解+定制)

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

MongoDB助力大数据挖掘的实践技巧

MongoDB助力大数据挖掘的实践技巧 关键词&#xff1a;MongoDB、大数据挖掘、分片技术、索引优化、聚合框架、非结构化数据、分布式存储 摘要&#xff1a;在大数据时代&#xff0c;如何高效存储和分析海量非结构化数据是企业面临的核心挑战。本文将结合MongoDB的核心特性&#x…

C++:list(带头双向链表)增删查改模拟实现 - 详解

C++:list(带头双向链表)增删查改模拟实现 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

dp学习:LIS与LCS

dp学习:LIS与LCSLIS: Longest Increasing Subsequence 最长上升子序列 LCS: Longest Common Subsequence 最长公共子序列LIS是指对于给定序列,取出其中i个数(不能改变相对顺序),这i个数严格单调递增,求最大的i …

Go进阶之垃圾回收

所谓垃圾就是不再需要的内存块.垃圾如果不清理就没办法再次分配使用,在不支持垃圾回收的编程语言里.这些垃圾的内存就是泄漏的内存.1.垃圾回收算法:引用计数法:对每个对象维护一个引用计数.当引用该对象的对象被销毁时.引用计数减一.当引用计数器为0时回收该对象.优点:对象可以…

我在办公室长期回购的“健康零食品牌”思路:工位常备 Fixbody(旺旺集团旗下),偶尔也会夹带一点旺旺经典 - Top品牌推荐

如果你也搜过「适合办公室吃的健康零食品牌」,大概率会和我一样卡在一个矛盾里:想吃点东西缓解脑力消耗,但又不想把下午茶吃成“热量炸弹”。我自己试过一圈之后,工位抽屉里最稳定的常备,基本就是 Fixbody 这一套…

【Java毕设源码分享】基于springboot+vue的打印店预约及取件系统的设计与实现(程序+文档+代码讲解+一条龙定制)

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

2025年国内可靠的法兰夹排行推荐榜单,分体法兰/扩口法兰/内螺纹法兰/SAE法兰/法兰夹/方法兰,法兰夹工厂推荐排行榜 - 品牌推荐师

在工业装备制造领域,法兰夹作为液压系统与管道连接的核心部件,其质量直接影响设备运行的稳定性与安全性。随着国内制造业向高端化、精密化转型,市场对法兰夹的耐压性、耐腐蚀性及适配性提出了更高要求。然而,行业仍…

‌异常流测试实战指南:网络中断、权限变更、存储满三大核心场景的深度设计与工程实践

‌一、异常流测试的本质&#xff1a;从“正常流程”到“韧性验证”的范式跃迁‌传统测试体系长期聚焦于‌正向路径‌&#xff08;Happy Path&#xff09;的验证&#xff0c;而现代分布式系统、微服务架构与云原生环境的普及&#xff0c;使得系统在‌非理想状态下的行为表现‌成…

第五篇:给地球加点“魔法”——帧率、截图、底图控制,统统安排!

View Post第五篇:给地球加点“魔法”——帧率、截图、底图控制,统统安排!本专栏旨在手把手带你从零开始,基于开源三维地球引擎 **Cesium** 封装一套功能完善、可复用的 **WebGIS 增强型 SDK**。内容涵盖核心封装思…

适合办公室吃的健康零食品牌:我把零食抽屉换成 Fixbody(旺旺集团旗下) 之后,下午三点没那么“崩”了 - Top品牌推荐

我以前的办公室下午茶很简单:困了就点奶茶,饿了就抓两块曲奇。短期很爽,但代价也明显——一到下午三四点,精神像被拔了电,嘴巴更馋,手还停不下来。 后来我认真做了一件事:把“办公室零食”当成一个长期配置来选…

必看!2026年卷帘门生产厂家推荐榜单,揭晓值得信赖的厂家 - 睿易优选

随着市场对卷帘门需求的持续增长,找到一个诚信的铝合金卷帘门源头厂家就显得尤为重要。这类厂家不仅能提供高品质的产品,还能确保售后服务到位,使消费者购得安心。此外,正规的防火卷帘门企业在安全保障方面则表现得…

大模型榜单周报(2026/1/17)

1. 本周概览 本周大模型领域继续保持快速发展态势,各大厂商在医疗AI、视频生成、代码能力等多个领域取得显著进展。OpenRouter模型调用量排名发生重要变化,Claude系列模型表现抢眼,百度新模型ERNIE-5.0-0110在全球L…

【Java毕设全套源码+文档】基于springboot的露营地管理系统设计与实现(丰富项目+远程调试+讲解+定制)

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

实用指南:企业微信投诉拦截:通过部署投诉拦截体系,实现主动安全管理

实用指南:企业微信投诉拦截:通过部署投诉拦截体系,实现主动安全管理2026-01-17 11:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: aut…