题目描述

如题,已知一个数列,你需要进行下面两种操作:

1.将某区间每一个数数加上x

2.求出某一个数的值

输入输出格式

输入格式:

第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。

第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。

接下来M行每行包含2或4个整数,表示一个操作,具体如下:

操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k

操作2: 格式:2 x 含义:输出第x个数的值

输出格式:

输出包含若干行整数,即为所有操作2的结果。

输入输出样例

输入样例#1: 复制

5 5
1 5 4 2 3
1 2 4 2
2 3
1 1 5 -1
1 3 5 7
2 4

输出样例#1: 复制

6
10

说明

时空限制:1000ms,128M

数据规模:

对于30%的数据:N<=8,M<=10

对于70%的数据:N<=10000,M<=10000

对于100%的数据:N<=500000,M<=500000

样例说明:

故输出结果为6、10

【解题思路】

这题也是一道很不错的题目,是一道区间修改,单点查询的树状数组(单点修改区间查询)改编

这道题利用了差分数组的思想,差分数组就是记录后一个数减去前一个数记录在差分数组中(即为程序中的ADD)

这样区间修改(l,r)时即可在l上加上修改值,r+1上减去修改值即可

单点查询即可直接查询即可

【code】

 1 // luogu-judger-enable-o2
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 int n,m;
 7 int a[500005],c[500005];
 8 inline int lowbit(int x){
 9     return x&(-x);
10 }
11 inline int GetSum(int x){
12     int ans=0;
13     for(register int i=x;i!=0;i-=lowbit(i))
14         ans+=c[i];
15     return ans;
16 }
17 inline void Add(int x,int y){
18     for(register int i=x;i<=n;i+=lowbit(i))
19         c[i]+=y;
20     return ;
21 }
22 int main(){
23     //freopen("3368.in","r",stdin);
24     //freopen("3368.out","w",stdout);
25     scanf("%d%d",&n,&m);
26     for(register int i=1;i<=n;i++){
27         scanf("%d",&a[i]);
28         Add(i,a[i]-a[i-1]);
29     }
30     int x,y,z,k;
31     for(register int i=1;i<=m;i++){
32         scanf("%d",&x);
33         if(x==1){
34             scanf("%d%d%d",&y,&z,&k);
35             Add(y,k);
36             Add(z+1,-k);
37         }
38         if(x==2){
39             scanf("%d",&y);
40             printf("%d\n",GetSum(y));
41         }
42     }
43     return 0;
44 }

Finished

转载于:https://www.cnblogs.com/66dzb/p/11195796.html

【模板】树状数组 2相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. P3374 【模板】树状数组 1

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

  8. 树状数组与离散化与求第K大模板

    树状数组模板: //Cnt为数组的界 //cnt[i]为编号或者数值上小于id的数量 void Update(LL Id) {while(Id<=Cnt){cnt[Id]++;Id+=lowbi ...

  9. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间

    从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...

最新文章

  1. 独家 | kaggle季军新手笔记:利用fast.ai对油棕人工林图像进行快速分类(附代码)...
  2. 图例放在图的外面_Origin做双Y轴箱型图(图文讲解)
  3. 安装node-sass时出现的错误解决方案(Mac自用,也可以借鉴)
  4. Codevs 1049 棋盘染色
  5. 关于CPU、指令集、架构、芯片概述
  6. 针对新手的Java EE7和Maven项目-第2部分-为我们的应用程序定义一场简单的战争
  7. python实现斐波那契数列
  8. asp.net mvc 路由检测工具
  9. 【BZOJ】【1096】【ZJOI2007】仓库建设
  10. Python基础第二十天:线程
  11. 两次称量误差多少为恒重_双台子100吨二手散装罐回收价格多少
  12. python装饰器详解-如何更通俗地讲解Python的装饰器?
  13. W Zong / A Robust Open-source Algorithm to Detect Onset and Duration of QRS Complexes
  14. HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
  15. thing.js入门学习
  16. java实现 -- 模板方法模式 -- 旅游签证
  17. web视频(点播/直播)播放器选型
  18. 程序猿段子_程序猿的24个段子,笑着笑着眼泪就出来了
  19. 设置<hr>标签的样式
  20. AXI协议详解(1)-协议简介

热门文章

  1. IT阅读——关于“业务”
  2. HDU-1698-Just a Hook
  3. SQLServer2005数据库自动备份
  4. Using NUnit with Visual Studio 2005 Express Editions
  5. ArcGIS Engine开发-TOCControl中实现图层的拖放
  6. ORB_SLAM2中的Sim3变换
  7. Ubuntu18.04运行ORB_SLAM2
  8. 《OpenCV3编程入门》学习笔记2 启程前的认知准备
  9. python gui界面设置数据储存在哪里_我整理的一些常用Python库!让你快速记住这些库的用法!建议收藏...
  10. sklearn库安装_没有依赖库也能跑机器学习模型!推荐一个强大工具m2cgen