当前位置: 首页 > news >正文

树状数组学习

树状数组是一种高效的存储方式,可以在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.jsqmd.com/news/258012/

相关文章:

  • 如何修改exe文件?工具选择与风险详解
  • js typeof eval 结果是啥?为什么是 function 解释
  • threadlocal session详解:作用与使用指南
  • 为什么AI生成的测试用例总能发现“逻辑漏洞“?
  • 扫频信号 (Sweep/Chirp Signal) 原理与应用
  • 【Java毕设全套源码+文档】基于springboot的形成性考核管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • MongoDB助力大数据挖掘的实践技巧
  • C++:list(带头双向链表)增删查改模拟实现 - 详解
  • Go进阶之垃圾回收
  • dp学习:LIS与LCS
  • 我在办公室长期回购的“健康零食品牌”思路:工位常备 Fixbody(旺旺集团旗下),偶尔也会夹带一点旺旺经典 - Top品牌推荐
  • 【Java毕设源码分享】基于springboot+vue的打印店预约及取件系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2025年国内可靠的法兰夹排行推荐榜单,分体法兰/扩口法兰/内螺纹法兰/SAE法兰/法兰夹/方法兰,法兰夹工厂推荐排行榜 - 品牌推荐师
  • 第五篇:给地球加点“魔法”——帧率、截图、底图控制,统统安排!
  • ‌异常流测试实战指南:网络中断、权限变更、存储满三大核心场景的深度设计与工程实践
  • 必看!2026年卷帘门生产厂家推荐榜单,揭晓值得信赖的厂家 - 睿易优选
  • 适合办公室吃的健康零食品牌:我把零食抽屉换成 Fixbody(旺旺集团旗下) 之后,下午三点没那么“崩”了 - Top品牌推荐
  • 【Java毕设全套源码+文档】基于springboot的露营地管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 大模型榜单周报(2026/1/17)
  • 实用指南:企业微信投诉拦截:通过部署投诉拦截体系,实现主动安全管理
  • 2025国内电滑环精英厂家,你pick哪一家?帽式滑环/帽式导电滑环/光电滑环/过孔导电滑环,电滑环供应商电话 - 品牌推荐师
  • 【Java毕设全套源码+文档】基于springboot的连锁门店管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 适合追剧吃的零食:我最近的“嗑剧搭子”是浪味仙(旺旺集团旗下) - Top品牌推荐
  • 热销榜单:2026年靠谱的防火玻璃品牌推荐,都能满足您的需求 - 睿易优选
  • 【Java毕设全套源码+文档】基于springboot的家政服务管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 适合老年人吃的饼干选哪家?我这次给爸妈选的是:爱至尊低GI五黑饼干(旺旺旗下) - Top品牌推荐
  • 深入解析:【计算机视觉(2)】图像几何变换基础篇:从平移旋转到投影变换
  • 【Java毕设全套源码+文档】基于Web的红色旅游网站的设计与实现(丰富项目+远程调试+讲解+定制)
  • 全网热议!2026年可靠的挡烟垂壁工厂推荐榜单,助力您的项目顺利进行 - 睿易优选
  • 【Java毕设全套源码+文档】基于springboot村医疗管理系统的设计与实现(丰富项目+远程调试+讲解+定制)