扫盲篇:

在线的数据结构,支持随时修改某个元素的值,复杂度也为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

树状数组 (数据结构)相关推荐

  1. 树状数组 数据结构详解与模板(可能是最详细的了)

    目录 转载请注明出处:bestsort.cn 树状数组基础 单点更新: 区间查询: 高级操作 求逆序对 操作 原理 求区间最大值 区间修改+单点查询 查询 修改 区间修改+区间查询 查询 修改 二维树 ...

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

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

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

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

  4. 树状数组(Binary Indexed Tree) 总结

    1."树状数组"数据结构的一种应用 对含有n个元素的数组(a[1],...,a[k],...,a[n]): (1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]. ...

  5. ACM入门之【树状数组】

    树状数组和线段树具有相似的功能,但他俩毕竟还有一些区别:树状数组能有的操作,线段树一定有:线段树有的操作, 树状数组不一定有.但是树状数组的代码要比线段树短,思维更清晰,速度也更快,在解决一些单点修改 ...

  6. 树状数组(尽量详细了)

    树状数组 树状数组是一个查询和修改复杂度都为log(n)的数据结构.主要用于数组快速单点修改,和快速区间求和. 引子 不结合示例分析的题解都是流氓,这里给出leetcode上的一道问题来说明树状数组的 ...

  7. python 树状数组_树状数组(Binary Indexed Tree) 总结

    1."树状数组"数据结构的一种应用 对含有n个元素的数组(a[1],...,a[k],...,a[n]): (1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]. ...

  8. 『ACM-算法-数据结构』信息竞赛进阶指南--树状数组 (模板)

    写在前面: 我们是主要是讲算法模板,即实现的代码,并不讲实现的原理 什么是树状数组? 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度 ...

  9. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  10. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

最新文章

  1. c++ vector简单使用
  2. Mustache初识
  3. c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
  4. nginx多进程,日志不乱序
  5. 基于形态学操作提取水平和垂直线条(五线谱中音符和乐谱线的分离)
  6. javascript获取事件源对象和产生事件的对象
  7. 给不起钱的大公司,算不上大公司
  8. 越烧钱越上瘾,年轻人为何沉迷「白色鸦片」?
  9. linux以长格式显示当前目录的详细信息,Linux常用命令系列——文件和目录操作命令(ls)...
  10. java图书推荐系统源代码_基于Web图书推荐系统设计
  11. BZOJ1140: [POI2009]KOD 编码
  12. 计算机无法访问 与管理员联系,解决windows无法访问 你没有权限访问,请与网络管理员联系-win7管理员取得所有权...
  13. GIT远程分支误删恢复
  14. 小米book pro16笔记本怎么U盘安装系统教学分享
  15. CMMI3和CMMI5的区别
  16. 线程wait和notify方法
  17. ffmpeg去logo转
  18. 编译原理之词法分析、语法分析、语义分析
  19. java概述及jdk历史演变
  20. 一个很好用的练习英语听力的网站

热门文章

  1. lstm网络一般训练多少轮_Pytorch的LSTM的理解
  2. Zilliqa Scilla入门
  3. 并发(concurrent)、并行(parallel)、顺序(sequential)、串行(serial)是什么 区别
  4. 数学建模(一)层次分析法
  5. 手机端html本地存储,HTML5 web storage本地存储
  6. es6之模块化(module)--绝对能看懂
  7. list中随机获取n条、随机生成4位6位数工具类,1-n范围随机数,Math.random()生成随机数
  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_4_File类的构造方法...
  9. Hibernate视频学习笔记(8)Lazy策略
  10. 电影图标:杀死比尔(Kil Bill)