树状数组 (数据结构)
扫盲篇:
在线的数据结构,支持随时修改某个元素的值,复杂度也为log级别。
假设A[]数组为存储原来的值得数组,C[]为树状数组。
我们定义:C[i] = A[i - 2^k + 1] + ..... + A[i] 其中k为i用二进制表示时的末尾0的个数。例如:i= 10100,则k = 2,i = 11000,则k = 3;(i为二进制)
求解2^k的值得方法:
1.int lowbit(int x){ return x&(x^(x–1)); }
2(利用机器的补码原理) int lowbit(int x){ return x&(-x); }
第一个函数;
int lowbit(int x)
{
return x&(-x);
}
如果是x+=x&(-x);就是得到的改点的父节点的值;
如果是x+=x&(-x);就是得到的改点的父节点的值。
第二个函数
void update(int x,int num)
{
while(x<=N)
{
d[x]+=num;
x+=lowbit(x);
}
}
第三个函数
int getSum(int x)
{
int s=0;
while(x>0)
{
s+=d[x];
x-=lowbit(x);
}
return s;
}
拓展到二维:
int sum(int x,int y)
{
int ret = 0;
for(int i = x;i > 0;i -= lowbit(i))
for(int j = y;j > 0;j -= lowbit(j))
ret += c[i][j];
return ret;
}
void add(int x,int y,int val)
{
for(int i = x;i <= n;i += lowbit(i))
for(int j = y;j <= n;j += lowbit(j))
c[i][j] += val;
}
转载于:https://www.cnblogs.com/henserlinda/p/5187679.html
树状数组 (数据结构)相关推荐
- 树状数组 数据结构详解与模板(可能是最详细的了)
目录 转载请注明出处:bestsort.cn 树状数组基础 单点更新: 区间查询: 高级操作 求逆序对 操作 原理 求区间最大值 区间修改+单点查询 查询 修改 区间修改+区间查询 查询 修改 二维树 ...
- js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)
本文来源于力扣圈子,作者:胡小旭.点击查看原文 力扣leetcode-cn.com 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树.其初 ...
- 数据结构--树状数组
文章目录 1. 树状数组 2. 单点修改 3. 区间修改 4. 完整代码 5. 参考文献 1. 树状数组 类似数据结构:线段树(Segment Tree) 树状数组 跟 线段树 的区别: 树状数组能做 ...
- 树状数组(Binary Indexed Tree) 总结
1."树状数组"数据结构的一种应用 对含有n个元素的数组(a[1],...,a[k],...,a[n]): (1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]. ...
- ACM入门之【树状数组】
树状数组和线段树具有相似的功能,但他俩毕竟还有一些区别:树状数组能有的操作,线段树一定有:线段树有的操作, 树状数组不一定有.但是树状数组的代码要比线段树短,思维更清晰,速度也更快,在解决一些单点修改 ...
- 树状数组(尽量详细了)
树状数组 树状数组是一个查询和修改复杂度都为log(n)的数据结构.主要用于数组快速单点修改,和快速区间求和. 引子 不结合示例分析的题解都是流氓,这里给出leetcode上的一道问题来说明树状数组的 ...
- python 树状数组_树状数组(Binary Indexed Tree) 总结
1."树状数组"数据结构的一种应用 对含有n个元素的数组(a[1],...,a[k],...,a[n]): (1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]. ...
- 『ACM-算法-数据结构』信息竞赛进阶指南--树状数组 (模板)
写在前面: 我们是主要是讲算法模板,即实现的代码,并不讲实现的原理 什么是树状数组? 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度 ...
- 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...
- 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)
正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti时在wiw_iwi出现(只出现一个单位时间),价值为sis_isi,当你t ...
最新文章
- c++ vector简单使用
- Mustache初识
- c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
- nginx多进程,日志不乱序
- 基于形态学操作提取水平和垂直线条(五线谱中音符和乐谱线的分离)
- javascript获取事件源对象和产生事件的对象
- 给不起钱的大公司,算不上大公司
- 越烧钱越上瘾,年轻人为何沉迷「白色鸦片」?
- linux以长格式显示当前目录的详细信息,Linux常用命令系列——文件和目录操作命令(ls)...
- java图书推荐系统源代码_基于Web图书推荐系统设计
- BZOJ1140: [POI2009]KOD 编码
- 计算机无法访问 与管理员联系,解决windows无法访问 你没有权限访问,请与网络管理员联系-win7管理员取得所有权...
- GIT远程分支误删恢复
- 小米book pro16笔记本怎么U盘安装系统教学分享
- CMMI3和CMMI5的区别
- 线程wait和notify方法
- ffmpeg去logo转
- 编译原理之词法分析、语法分析、语义分析
- java概述及jdk历史演变
- 一个很好用的练习英语听力的网站
热门文章
- lstm网络一般训练多少轮_Pytorch的LSTM的理解
- Zilliqa Scilla入门
- 并发(concurrent)、并行(parallel)、顺序(sequential)、串行(serial)是什么 区别
- 数学建模(一)层次分析法
- 手机端html本地存储,HTML5 web storage本地存储
- es6之模块化(module)--绝对能看懂
- list中随机获取n条、随机生成4位6位数工具类,1-n范围随机数,Math.random()生成随机数
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_4_File类的构造方法...
- Hibernate视频学习笔记(8)Lazy策略
- 电影图标:杀死比尔(Kil Bill)