树状数组
来源:互联网 发布:周润发 知乎 编辑:程序博客网 时间:2024/06/06 07:01
定义:
给定数组A,我们设一个数组C满足 (下标都是从1开始)
C[i] = 从A[i]开始的左边k个数的和
其中,k为 i 在二进制下末尾0的个数! 即 k = i & - i
则我们称C为树状数组。
方法:
void add(int i,int num) // 建表{ while(i<=n) { tree[i]+=num; i += i & -i ; }}
int sum(int k) // 求1~k的区间和 想求a到b的区间和,就sum(b)-sum(a){ int ans=0; while(k) { ans+=tree[k]; k -= k & -k; // 或者 k &= k - 1 ; } return ans;}
使用:经常用来标记状态,即调用add( i ,1 ) 或 add( i ,-1 )就可以在lg n的时间内统计出前面已被标记过多少数
注意:当有数据是0的时候,可以全部数据+1可以避免对0下标操作
hdu 1541 Stars
树状数组经典入门题。
poj 2155 Matrix
二维树状数组经典题 (跟一维是一样滴)
1 0
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- 树状数组
- oc学习之Foundation框架--字符串
- 搜索附近的蓝牙设备
- Java网络编程四 非阻塞通信UDP
- 2016多校第10场
- Java虚拟机类加载机制
- 树状数组
- 数据结构之逻辑结构与物理结构
- Docker 从入门到放弃(五)之Docker镜像管理
- Hadoop 研发之远程调试详细剖析--WordCount V2.0
- spring boot 全局异常捕获
- webx记录
- 微服务架构 (八): 业务驱动与团队协作微服务粒度设计: 微服务内部的世界
- 自定义View
- mysql 数据库字符集定义