[算法模板]树状数组

思路

图片转自:yhf_2015——彻底理解树状数组

使用这个图片就能很快的理解树状数组。

我们可以先根据图片来分解一个十进制数成二次幂。

example:

\(15=2^0+14\)

\(14=2^1+12\)

\(12=2^2+8\)

\(8=2^3\)

\(15=2^0+2^1+2^2+2^3\)

图上的每一个白条(包含灰块)就是\(c[i]\)覆盖的范围,而\(lowbit(i)\)就是灰块对应的白条的长度。

example:

\(c[12]= \sum _{i=9}^{12} a[i]\)

\(lowbit(12)=4\)

显然,加上lowbit就可以达到覆盖自己的白条(父节点)。减去lowbit就下一个当前灰块对应白条不包含的,离当前灰块最近的白条。(14->12,12->8,8->0)

实现

总结一下,原数组a和树状数组c大小相等。每个节点的父亲节点为\(x+lowbit(x)\)。

修改操作,每次修改给当前位置的c加上权值d。位置p加上lowbit(p),位置\(p\leq n\)。

求和操作,每次累加当前位置的c权值。位置p减去lowbit(c),位置\(1 \leq p\)。

int lowbit(int x)
{return x&(-x);
}
int sum(int x)//查询1-x的值
{int ret=0;while(x){ret+=c[x];x-=lowbit(x);}return ret;
}
void update(int x,int d)//将x的值加上d
{while(x<=n){c[x]+=d;x+=lowbit(x);}
}

转载于:https://www.cnblogs.com/GavinZheng/p/10829834.html

[算法模板]树状数组相关推荐

  1. 【luogu3368】模板 树状数组 2

    题面 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 题解1 单点查询+区间修改. -.-说了树状数组模板那就用树状数组. 树状数组维护差分数列即可(差分前 ...

  2. python【数据结构与算法】树状数组(附例题)

    文章目录 1 概述 2 单点查询 3 区间修改 4 例题 1 概述 首先引入差分数组d,设原数组为a,令d[i]=a[i]-a[i-1].由此关系式得 也就是a[j]等于d[j]的前 j 项和,即前缀 ...

  3. 【luogu3374】模板 树状数组 1

    题面 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 题解1 单点修改+区间查询. 关于树状数组的理解,补上一点.位运算的操作其实对应的就是任意一个整数在二进 ...

  4. 【算法】树状数组 P1908 逆序对

    P1908 逆序对 #include<iostream> #include<cstdio> #include<algorithm> #define ll long ...

  5. 模板——树状数组求逆序对

    题目链接:https://www.luogu.org/problemnew/show/P1908 1 #include <map> 2 #include <set> 3 #in ...

  6. 算法学习——树状数组和线段树

    目录 1.动态求连续区间和 题目 输入格式 输出格式 数据范围 输入样例: 输出样例: 分析 代码 2.数星星 题目 输入格式 输出格式 数据范围 输入样例: 输出样例: 分析 代码 3.数列区间最大 ...

  7. 树状数组基础原理与模板

    树状数组 2021年7月29 1.算法原理 树状数组解决什么问题? 解决区间上点更新与维护的问题.如更改某些点值求区间和,或求某位前有多少比其小的问题. 其实现的原理是什么? 首先看图: 在这个图中, ...

  8. 模板三连击:树状数组+线段树+主席树

    没事儿干,复习模板...... 1.树状数组 本来不想写这个的,但是反正就几分钟就打完了,所以就写了,水AC数. 洛谷 P3374 [模板]树状数组 1 1 #include<cstdio> ...

  9. 0x42.数据结构进阶 - 树状数组

    目录 一.树状数组与逆序对 A.luogu P1908 逆序对(模板题) B.AcWing 241. 楼兰图腾 树状数组的拓展应用 1.区间加,求单点值 A.AcWing 242. 一个简单的整数问题 ...

最新文章

  1. Java设计模式探讨之单例模式
  2. [原] 探索 EventEmitter 在 Node.js 中的实现
  3. 2020年全球数据中心基础设施收入1650亿美元
  4. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
  5. python 脚本学习(二)
  6. 【Python】Matplotlib绘制百变椭圆
  7. 2012智能管道技术创新与应用实践论…
  8. 深度内幕丨揭秘积分墙新颖反作弊
  9. ALSA子系统(十四)------snd_pcm_drain和snd_pcm_drop
  10. 软件工程课程的实践(综合实践能力创新实训 3)解决方案
  11. [NOI2010] 航空管制 (构反图+拓扑)
  12. 文本分析简历项目收集-----机器学习(仅供参考)
  13. 如何通过热点打造爆款笔记?6个好写易爆的热点类型
  14. nplayer,es文件浏览器等进行局域网连接时登录不上或者不断弹出登录框的问题
  15. babylon-gui文档笔记
  16. hdfs清理回收站命令(参考)
  17. 计算机f8键的功能,f8键有什么作用(图文)
  18. 新装服务器、虚拟机应该做什么
  19. package.json 封装 vue模块_vue仿小米商城 -- 我知道的都在这里了
  20. 使用RENREN-GENERATOR时遇到循环错误问题 Relying upon circular references is discouraged and they are prohibited

热门文章

  1. Oracle查询对应表是否在使用,oracle 中查询当前用户可以看到的表名、表对应的所有字段...
  2. 远程连接linux的mysql_【Linux开启mysql远程连接的设置步骤】 mysql开启远程连接
  3. Spring Security Oauth2 (五) 密码码模式 整合jwt
  4. Flink Parallelism
  5. sqlalchemy 查询
  6. VSCode Python Tutorial
  7. android flutter 环境,Android Studio 中创建Flutter环境配置(Mac环境)
  8. Linux学习总结(81)—— Linux 权限详解
  9. 支付业务与技术架构学习总结(4)——对账相关业务知识及对账系统总结
  10. android主题资源,使用 Theme Editor 设计应用主题背景