C++怎么实现一个树状数组_C++高效实现单点修改与区间求和的Fenwick树


树状数组通过lowbit实现高效单点更新和区间求和,支持O(log n)操作,适用于动态前缀和场景。

c++怎么实现一个树状数组_c++高效实现单点修改与区间求和的fenwick树

树状数组(Fenwick Tree)是一种高效处理单点更新区间求和的数据结构,代码简洁、常数小,特别适合在频繁修改与查询的场景中使用。C++ 实现 Fenwick 树非常直观,下面介绍其核心原理与实现方式。

树状数组的基本思想

Fenwick 树利用二进制特性维护前缀和。每个节点存储一段区间的和,通过 lowbit 操作快速定位父节点或子节点。支持:

  • 单点修改:更新某个位置的值,影响 O(log n) 个节点
  • 前缀查询:求 [1, i] 的和,访问 O(log n) 个节点
  • 结合前缀和可得任意区间 [l, r] 的和

lowbit 函数的实现

lowbit(x) 返回 x 的二进制表示中最低位 1 所对应的值,例如 lowbit(6)=2(6=110₂)。C++ 中可通过位运算高效实现:

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

树状数组的封装实现

以下是一个完整的 C++ 类封装,支持单点加法和区间求和:

#include <vector>
<p>class FenwickTree {
private:
std::vector<long long> tree;
int n;</p><pre class='brush:php;toolbar:false;'>int lowbit(int x) {
    return x & (-x);
}

public: // 构造函数,n 为原数组长度 FenwickTree(int size) { n = size; tree.assign(n + 1, 0); }

// 单点增加:在位置 i 上加上 delta(i 从 1 开始)
void update(int i, int delta) {
    while (i <= n) {
        tree[i] += delta;
        i += lowbit(i);
    }
}

// 前缀求和:[1, i] 的和
long long prefixSum(int i) {
    long long sum = 0;
    while (i > 0) {
        sum += tree[i];
        i -= lowbit(i);
    }
    return sum;
}

// 区间求和:[l, r] 的和(l 和 r 都从 1 开始)
long long rangeSum(int l, int r) {
    return prefixSum(r) - prefixSum(l - 1);
}

};

文心一言 文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

文心一言 4061 查看详情 文心一言

使用示例与注意事项

假设有一个初始数组 [1, 3, 5, 7, 9],我们可以这样使用 FenwickTree:

#include <iostream>
using namespace std;
<p>int main() {
FenwickTree fw(5);</p><pre class='brush:php;toolbar:false;'>// 模拟初始化:逐个添加元素
fw.update(1, 1);
fw.update(2, 3);
fw.update(3, 5);
fw.update(4, 7);
fw.update(5, 9);

cout << "Sum [1,3]: " << fw.rangeSum(1, 3) << endl; // 输出 9
fw.update(2, 2); // A[2] += 2
cout << "Sum [1,3] after update: " << fw.rangeSum(1, 3) << endl; // 输出 11

return 0;

}

注意:FenwickTree 通常基于 1 索引设计,传入的下标应从 1 开始。若原始数据是 0 索引,使用时需 +1 映射。

基本上就这些。实现简单,效率高,适合竞赛和工程中需要动态前缀和的场合。

以上就是C++怎么实现一个树状数组_C++高效实现单点修改与区间求和的Fenwick树的详细内容,更多请关注其它相关文章!


# 边缘  # 门户网站推广优点  # seo实践培训  # 扬州推广网站好不好  # 常平推广网络营销方案  # 云南seo优化排行榜  # 邯郸快手推广营销中心  # 社交媒体营销推广区别  # 福州台江抖音seo  # 出口网站优化费用高吗  # 网站建设广告发布  # 是一种  # ai  # 是一个  # 游戏开发  # 何为  # 新和  # 数据结构  # 一言  # 树状  # 单点  # stream  # ios  # c++ 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 学习通网页版课程打不开_课程无法访问时的解决方法  Composer如何使用composer-plugin-api开发自定义插件  OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧  iPhone16Plus参数配置如何调整声音_iPhone16Plus参数配置声音调整详细方法  使用VS Code调试Python代码:从入门到精通  《随手记》关闭首页消息推送方法  realme 10 Pro息屏方案_realme 10 Pro省电策略  Win10运行窗口在哪里打开 Win10调出运行命令框快捷键【技巧】  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  实现可重用自定义Python Range类  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  QQ邮箱PC端登录页面_QQ邮箱网页版登录界面  《七读免费小说》开通会员方法  在Dash应用中自定义HTML标题和网站图标  GBA模拟器手柄按键设置  《画加》约稿流程  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  网页版网易云音乐入口_网易云音乐在线官网登录  《淘宝联盟》推广自己的店铺方法  mail.qq.com登录入口 QQ邮箱网页版直达  iPhone14无法连接蓝牙设备如何解决  六级准考证号怎么查_四六级准考证查询入口官网  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  《荔枝fm》导出文件教程  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  Python中安全地将环境变量转换为整数的类型注解指南  《伊瑟》凶影追缉库卢鲁boss攻略  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  《下一站江湖2》独孤剑诀习得方法  小红书如何引流到私信?引流到私信有用吗?  《万兴喵影》导出视频方法  iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程  《华夏千秋》龙女试炼功法获取方法  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  VS Code中的Tailwind CSS IntelliSense插件使用技巧  J*aScript二进制处理_ArrayBuffer与Blob  抖音火山版如何进行提现  C#解析来自网络的XML流数据 实时错误处理与重试机制  《三国:谋定天下》平民全阶段通用阵容  mysql如何限制远程访问_mysql远程访问限制方法  热血江湖归来医师加点攻略  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  店铺如何关联视频号推广?视频号推广有什么用?  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  铁路12306官网入口 铁路12306中国铁路官网登录首页  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  中通快递官网指定查询 中通快递单号查询平台入口  抖音号升级成企业资质怎么弄?有什么好处? 

 2025-11-28

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.