树状数组(搬运自维基百科)
树状数组(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; }
求和:
假设我们需要计算的值.
- 首先,将ans初始化为0,将i计为k.
- 将ans的值加上BIT[P]
- 将i的值减去lowbit(i)
- 重复步骤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
树状数组(搬运自维基百科)相关推荐
- js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)
本文来源于力扣圈子,作者:胡小旭.点击查看原文 力扣leetcode-cn.com 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树.其初 ...
- szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】
树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...
- 数据结构--树状数组
文章目录 1. 树状数组 2. 单点修改 3. 区间修改 4. 完整代码 5. 参考文献 1. 树状数组 类似数据结构:线段树(Segment Tree) 树状数组 跟 线段树 的区别: 树状数组能做 ...
- 线。段。树--树状数组-主席树
简单了解一下线段树 以前写过的内容,搬运过来 线段树的应用场景:满足区间加法性质且多次查询,什么是区间加法性质,比如最大值,求和,树状数组.线段树.主席树依次. 线段树框架:建树--查询--更新... ...
- 金色丝线将瞬间一分为二 树状数组的使用
Description 为了解开骑士木乃伊事件,久城一弥和布洛瓦警官来到了停尸间.停尸间里有N具遗体,每具遗体都有一个坐标(X,Y). 由于停尸间的遗体摆放得横平竖直,我们认为两具遗体(Xi,Yi)和 ...
- 如此好的树状数组学习资料
树状数组学习系列1 之 初步分析--czyuan原创 其实学树状数组说白了就是看那张图,那张树状数组和一般数组的关系的,看懂了基本就没问题了,推荐下面这个教程:http://www.topcoder. ...
- 洛谷 P5057 [CQOI2006]简单题(树状数组)
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...
- Color the ball(HDU1556)树状数组
每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
最新文章
- FedML联邦机器学习框架正式开源,助力算法开发和性能比较
- 如何在AWS搭建服务器控制服务器
- 廖雪峰js教程笔记9 json
- cmosfixr插件怎么用_3dmax插件神器|怎么用3dmax插件神器去完成背景墙的效果图设计?...
- hog函数的用法 python_Python常见内置函数用法(三)
- 利用SQL语句对数据进行操作:插入、更新与删除数据行
- 乱码385b1b926a38153d38957556c0dc55b5
- Google 发布全新绘画工具 AutoDraw
- springboot 打印日志
- C Library User 手册(25)
- python分析数据走势图_python数据分析-11数据分析实战案例
- matlab 修改heatmap colorbar 热图
- S-8254A------3节/4节电池串联用电池保护IC
- 足球大师服务器维护,球员能力提升终极密法《足球大师》详细突破攻略
- Flash 游戏制作一些资源
- android编译错误
- 路由的实现原理是什么?
- 使用nodejs搭建聊天室
- OpenCL clCreateBuffer占用太多时间
- created(created)
热门文章
- _id随机的 es_es 的数据操作
- python-组合数据类型
- 【11】 Express安装入门与模版引擎ejs
- tomcat启动报错,找不到相应的 queue,从而引发内存泄漏
- SharePoint自动化系列——通过Coded UI录制脚本自动化创建SharePoint Designer Reusable Workflow...
- Martin Fowler 经典软件著作合集
- careercup-递归和动态规划 9.10
- 如何安装html启动器,如何在Spring Boot中创建自己的启动器?
- java中继承applet类_java.applet.Applet类
- YFI 创始人 Andre Cronje:有四个新产品待发布,但担心在推出后被分叉