树状数组(Fenwick_tree),最早由Peter M. Fenwick于1994年以A New Data Structure for Cumulative Frequency Tables为题发表在SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和。它可以以的时间得到,并同样以对某项加一个常数。

基本操作:

  1)新建;

  2)修改;

  3)求和;

lowbit求法:

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

新建:

定义一个数组 BIT,用以维护的前缀和,则:

具体能用以下方式实现:

void build()
{for (int i=1;i<=MAX_N;i++){BIT[i]=A[i];for (int j=i-1; j>i-lowbit(i); j--)BIT[i]+=A[j];}
}

修改:

假设现在要将的值增加delta,

那么,需要将覆盖的区间包含的值都加上K.

这个过程可以写成递归,或者普通的循环.

需要计算的次数与数据规模N的二进制位数有关,即这部分的时间复杂度是O(LogN)

void edit(int i, int delta)
{for (int j = i; j <= MAX_N; j += lowbit(j))BIT[j] += delta;
}

求和:

假设我们需要计算的值.

  1. 首先,将ans初始化为0,将i计为k.
  2. 将ans的值加上BIT[P]
  3. 将i的值减去lowbit(i)
  4. 重复步骤2~3,直到i的值变为0
int sum (int k)
{int ans = 0;for (int i = k; i > 0; i -= lowbit(i))ans += BIT[i];return ans;
}

转载于:https://www.cnblogs.com/yoyo-sincerely/p/5374889.html

树状数组(搬运自维基百科)相关推荐

  1. js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)

    本文来源于力扣圈子,作者:胡小旭.点击查看原文 力扣​leetcode-cn.com 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树.其初 ...

  2. szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】

    树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...

  3. 数据结构--树状数组

    文章目录 1. 树状数组 2. 单点修改 3. 区间修改 4. 完整代码 5. 参考文献 1. 树状数组 类似数据结构:线段树(Segment Tree) 树状数组 跟 线段树 的区别: 树状数组能做 ...

  4. 线。段。树--树状数组-主席树

    简单了解一下线段树 以前写过的内容,搬运过来 线段树的应用场景:满足区间加法性质且多次查询,什么是区间加法性质,比如最大值,求和,树状数组.线段树.主席树依次. 线段树框架:建树--查询--更新... ...

  5. 金色丝线将瞬间一分为二 树状数组的使用

    Description 为了解开骑士木乃伊事件,久城一弥和布洛瓦警官来到了停尸间.停尸间里有N具遗体,每具遗体都有一个坐标(X,Y). 由于停尸间的遗体摆放得横平竖直,我们认为两具遗体(Xi,Yi)和 ...

  6. 如此好的树状数组学习资料

    树状数组学习系列1 之 初步分析--czyuan原创 其实学树状数组说白了就是看那张图,那张树状数组和一般数组的关系的,看懂了基本就没问题了,推荐下面这个教程:http://www.topcoder. ...

  7. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  8. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  9. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

最新文章

  1. FedML联邦机器学习框架正式开源,助力算法开发和性能比较
  2. 如何在AWS搭建服务器控制服务器
  3. 廖雪峰js教程笔记9 json
  4. cmosfixr插件怎么用_3dmax插件神器|怎么用3dmax插件神器去完成背景墙的效果图设计?...
  5. hog函数的用法 python_Python常见内置函数用法(三)
  6. 利用SQL语句对数据进行操作:插入、更新与删除数据行
  7. 乱码385b1b926a38153d38957556c0dc55b5
  8. Google 发布全新绘画工具 AutoDraw
  9. springboot 打印日志
  10. C Library User 手册(25)
  11. python分析数据走势图_python数据分析-11数据分析实战案例
  12. matlab 修改heatmap colorbar 热图
  13. S-8254A------3节/4节电池串联用电池保护IC
  14. 足球大师服务器维护,球员能力提升终极密法《足球大师》详细突破攻略
  15. Flash 游戏制作一些资源
  16. android编译错误
  17. 路由的实现原理是什么?
  18. 使用nodejs搭建聊天室
  19. OpenCL clCreateBuffer占用太多时间
  20. created(created)

热门文章

  1. _id随机的 es_es 的数据操作
  2. python-组合数据类型
  3. 【11】 Express安装入门与模版引擎ejs
  4. tomcat启动报错,找不到相应的 queue,从而引发内存泄漏
  5. SharePoint自动化系列——通过Coded UI录制脚本自动化创建SharePoint Designer Reusable Workflow...
  6. Martin Fowler 经典软件著作合集
  7. careercup-递归和动态规划 9.10
  8. 如何安装html启动器,如何在Spring Boot中创建自己的启动器?
  9. java中继承applet类_java.applet.Applet类
  10. YFI 创始人 Andre Cronje:有四个新产品待发布,但担心在推出后被分叉