*P3374 【模板】树状数组 1*

第一道线段树的题,很好的板子题,中文体面就不过多解释了。

直接上代码(注释很详细了,前提学过线段树)

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 7;int n, a[N], opnum;
int op, pos, L, R, k;struct segment_tree {struct tree {int l, r;int lazy;int sum;}tr[N * 4];void build(int i, int l, int r) { //创建一棵树,i是节点,l时左边界,r是右边界tr[i].l = l, tr[i].r = r; // 该结点的区间[l , r];if (l == r) {  //当前为叶节点tr[i].sum = a[l]; //叶节点存储的是单个数字且是a数组中的数字return;}int mid = (l + r) >> 1;build(i * 2, l, mid); // 递归构造左子树build(i * 2 + 1, mid + 1, r); //递归构造右子树tr[i].sum = tr[i * 2].sum + tr[i * 2 + 1].sum; //更新结点sum的值,是从下往上确定每个节点的sum的}inline void add(int i, int dis, int k) {//单点修改,i是节点,dis是修改的位置,k是增加或减少的值if (tr[i].l == tr[i].r) { //判断到叶节点的时候说明找到了该数,该数字 + k;tr[i].sum += k;return;}if (dis <= tr[i * 2].r) add(i * 2, dis, k); //dis在哪里就往哪边靠else add(i * 2 + 1, dis, k); tr[i].sum = tr[i * 2].sum + tr[i * 2 + 1].sum; //从下往上重新确定路径上的节点的sum值return;}inline int serch(int i, int l, int r) { //区间查询,i是节点,要求[l, r]内值的和if (tr[i].l >= l && tr[i].r <= r) { //当节点的整个区间都被包含时就返回sumreturn tr[i].sum;}else if (tr[i].l > r || tr[i].r < l) return 0; // 当节点区间和所求的区间没有任何关系时返回0int s = 0;if (tr[i * 2 + 1].l <= r) s += serch(i * 2 + 1, l, r); // 当节点的右区间有重合时,就递归往又找,同时累加sif (tr[i * 2].r >= l) s += serch(i * 2, l, r); //当节点的左区间有重合时,同理操作return s;}
}ST;int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> opnum;for (int i = 1; i <= n; i++) {cin >> a[i];}ST.build(1, 1, n); // 建树for (int i = 1; i <= opnum; i++) {cin >> op;if (op == 1) {cin >> pos >> k;ST.add(1, pos, k); // 单点修改}else {cin >> L >> R;int re = ST.serch(1, L, R); // 区间查询cout << re << '\n';}}
}

[P3374 【模板】树状数组 1](单点修改,区间查询)相关推荐

  1. 树状数组(单点修改,区间修改等)

    前言:上次练习树状数组的专题还是半年前,练了练就过了,后来学了线段树,觉得树状数组这啥啊,线段树不香吗,就再也没管过树状数组了.直到几天前被树状数组血虐了,急忙爬回来补树状数组.(事实证明学的越少,越 ...

  2. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

  3. Billboard HDU - 2795(树状数组,单点修改,区间查询)

    题目链接:https://vjudge.net/problem/HDU-2795 思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了. ...

  4. 【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】...

    模拟题,可以用树链剖分+线段树维护. 但是学了一个厉害的..树状数组的区间修改与区间查询.. 分割线里面的是转载的: ----------------------------------------- ...

  5. 树状数组之区间修改单点查询

    树状数组的区间修改单点查询 树状数组其实本质还单点修改区间查询,但是我们怎么延伸到这个呢,我们建立一个差分数组, 比如:                a[10]={4, 6, 7, 5, 1, 6, ...

  6. 树状数组的区间修改+查询

    首先看树状数组是用来求前缀和比较方便的一种数据结构 sum[i] = Sigma a[i] =Sum(bit[x]) 而区间修改也不难实现 就是引入一个差分数组del del[i]表示对i~n的修改 ...

  7. [算法模板]树状数组

    [算法模板]树状数组 思路 图片转自:yhf_2015--彻底理解树状数组 使用这个图片就能很快的理解树状数组. 我们可以先根据图片来分解一个十进制数成二次幂. example: \(15=2^0+1 ...

  8. 分块的单点修改查询区间和_树状数组的区间修改与单点查询与区间查询

    如何将普通树状数组升级 普通的单点修改单点查询就不讲了,从区间修改和单点查询讲起. 原来的值存在a[]里面,多建立个数组c1[],注意:c1[i]=a[i]-a[i-1]. 那么求a[i]的值的时候a ...

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

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

  10. 树状数组(单点+区间的所有操作)

    转载:https://blog.csdn.net/I_believe_CWJ/article/details/80374326 更简洁方便的数据结构--树状数组(基于线段树的实现) 1.单点更新+区间 ...

最新文章

  1. excel中如何筛选重复数据
  2. 《Windows Server 2012 Hyper-V虚拟化管理实践》——3.2 Hyper-V主机日常管理
  3. 虚拟机系列 | 执行引擎和垃圾回收
  4. spring 多线程 写入数据库 和 写入 xml文件
  5. centos7查看mysql日志_centos 7 mysql启动失败–学会看错误日志
  6. 计算机cpu图片,电脑处理器天梯图2019
  7. mb.php js 劫持,黑帽seo防止网站被k的js劫持跳转代码
  8. 如视技术副总裁杨永林:当传统产业遇到“数字空间”
  9. php 抓取网页图片
  10. 计算机组成原理sp接口,计算机组成原理2008年4月真题试题(02318)
  11. 炸⾦花棋牌游戏Python
  12. 用Ruby替代Java做rest接口的单元测试!
  13. 作为技术分析工具的 MTF 指标
  14. 项目GIF斗图软件 总结概述
  15. Rodrigues(罗德里格斯)公式的理解与应用(旋转矢量与旋转矩阵的转化)
  16. 打字狗打字练习 - java关键字
  17. 一步一步的使用C++和OPENGL实现COLLADA骨骼动画 第一部分
  18. 以太网口差分电平_【成功案例】贴装TVS SP0505在RJ45以太网接口防护电路的应用,节约印制板空间...
  19. mix1 android n,MIX - 指尖的数字暗房 - Android 应用 - 【最美应用】
  20. 激活海量数据价值,实现生产过程优化

热门文章

  1. 5项基因改造让你拥抱大财富
  2. 支付宝信用卡还款即将收费,3个方法免手续费!
  3. 汇率兑换程序python按温度转换_python复习+实例编写(1)——温度转换、汇率转换...
  4. AWS如何安全顺利关闭所有的免费服务
  5. Linux中如何检测IP地址冲突问题
  6. php 微信表情存储,轻松处理PHP开发中微信emoji表情mysql存储的问题
  7. 2019 最烂密码排行榜大曝光!网友:已中招
  8. android 自动替换资源文件,简单高效的实现Android App全局字体替换
  9. 【电信学】【2019.03】5G异构网络中的移动性管理
  10. login主页面+接口+依赖