题目链接:https://www.luogu.org/problemnew/show/P3368

先介绍下差分:

设数组a[]={1,6,8,5,10},那么差分数组b[]={1,5,2,-3,5}

也就是说b[i]=a[i]-a[i-1];(a[0]=0;),那么a[i]=b[1]+....+b[i];(这个很好证的)。

假如区间[2,4]都加上2的话

a数组变为a[]={1,8,10,7,10},b数组变为b={1,7,2,-3,3};

发现了没有,b数组只有b[2]和b[5]变了,因为区间[2,4]是同时加上2的,所以在区间内b[i]-b[i-1]是不变的.

所以对区间[x,y]进行修改,只用修改b[x]与b[y+1]:

b[x]=b[x]+k;b[y+1]=b[y+1]-k;

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cmath>#include <queue>using namespace std;int n,m;int input[500010];int tree[500100];int lowbit(int x){return x & -x;}void add(int x,int k){while(x<=n){tree[x]+=k;x+=lowbit(x);}}int search(int x){int ans=0;while(x!=0){ans+=tree[x];x-=lowbit(x);}return ans;}int main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>input[i];for(int i=1;i<=m;i++){int a;scanf("%d",&a);if(a==1){int x,y,z;scanf("%d%d%d",&x,&y,&z);add(x,z);add(y+1,-z);}if(a==2){int x;scanf("%d",&x);printf("%d\n",input[x]+search(x));}}}

转载于:https://www.cnblogs.com/qingjiuling/p/10535565.html

洛谷模板,树状数组二 差分相关推荐

  1. 洛谷 P3374 树状数组模板1

    题目大意 给出一个初始数组,有两种操作,一种是将第x个数加上k,一种是求[x,y]区间和. 题目分析 直接暴力肯定TLE,我们可以用简单线段树或者树状数组优化,这里作者就采用简单线段树通过 #incl ...

  2. 洛谷 - P3374 树状数组1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 xx 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,mn,m,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...

  3. 洛谷.P3374 树状数组

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,m分别表示该数列数字的个数和操作的总个数. 第二行包含 n 个用 ...

  4. 洛谷P3374 树状数组模版1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

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

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

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

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

  7. BZOJ1103 大都市 DFS序 树状数组维护差分数组

    BZOJ1103 大都市 问题描述 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次 ...

  8. 【POJ - 3468 】 A Simple Problem with Integers (线段树模板 区间更新 + 区间和查询)(不能树状数组或差分数组)

    题干: You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type o ...

  9. szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】

    树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...

最新文章

  1. XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
  2. Python学习笔记四(Python OS模块)
  3. 360网络修复工具_Win10网络图标不见了解决方法
  4. 数据结构--------------静态表的希尔排序
  5. MailBee.NET Objects发送电子邮件(SMTP)教程六:创建并发送带有附件的邮件
  6. Zabbix监控——proxy 分布式监控配置
  7. 新基建下 AI 算力市场崛起,华为凭什么从中分一杯羹?
  8. 关于linux学习的热身知识八
  9. PHP学习随笔(3):数组
  10. 【渝粤题库】陕西师范大学209015公共经济学作业(高起本、专升本)
  11. NLP算法-情绪分析-snowNLP算法库
  12. android应用程序后台运行权限,检查Android应用程序是否在后台运行
  13. 东方时尚驾校科目一网上视频快速通过方法
  14. Java获取国内手机号码归属地
  15. 用计算机弹咱们结婚吧乐谱,用计算器弹奏“周杰伦”,这些乐谱也太简单了吧!...
  16. Flutter控件——常用控件:按钮
  17. 从零开始学Linux内核驱动--(二)简单内核模块驱动程序
  18. 单回路控制系统的matlab仿真,MATLAB/Simulink与过程控制系统仿真(修订版)
  19. Unity3d如何实现UGUI.Text的UV流动效果
  20. hashmap 不释放空间_一个1000万HashMap,会占用多少空间内存?

热门文章

  1. [蓝桥杯][算法训练VIP]乘积最大(动态规划)
  2. No Pain No Game HDU - 4630(gcd+线段树+离线处理)
  3. bartlett 算法 matlab,GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)
  4. classes maven 为空 打包_Maven打包:将classes打成Jar,之后打到War中(或打成jar),过滤指定目录。...
  5. ajax绑定事件页面重复提交,ajax防止用户重复提交点击事件
  6. java服务器内存问题_java内存泄漏5种情况总结
  7. linux postgres恢复数据库,从纯文本格式的备份文件恢复数据库
  8. [零基础,全开源]基于web的远程深度学习服务搭建
  9. FCOS 基于FPN之上的完全Anchor Free检测框架
  10. YUV420数据格式