模板题CODEVS-1082

给你N个数,有两种操作:

1:给区间[a,b]的所有数增加X

2:询问区间[a,b]的数的和。

第一行一个正整数n,接下来n行n个整数,

再接下来一个正整数Q,每行表示操作的个数,

如果第一个数是1,后接3个正整数,

表示在区间[a,b]内每个数增加X,如果是2,

表示操作2询问区间[a,b]的和是多少。

一维树状数组可以考虑用差分来做,但是扩展不到二维。

所以我们令di=(ai~an)的增量

思路和差分一样

#include<iostream>
#include<cstdio>
#include<algorithm>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
#define lowbit(x) x&(-x)
int n,m,a[1000005],c1[1000005],c2[1000005];
void update(int v,int val)
{for(int pp=v;pp<=n;c1[pp]+=val,c2[pp]+=val*v,pp+=lowbit(pp));
}
int query(int l,int r)
{int ans=0;for(int pp=r;pp>0;ans+=(r+1)*c1[pp],ans-=c2[pp],pp-=lowbit(pp));l--;for(int pp=l;pp>0;ans-=(l+1)*c1[pp],ans+=c2[pp],pp-=lowbit(pp));return ans;
}
int main()
{scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)update(i,a[i]-a[i-1]);for(int i=1;i<=m;i++){int p,l,r,val;scanf("%d %d %d",&p,&l,&r);if(p==1){scanf("%d",&val);update(l,val);update(r+1,-val);}else{printf("%d\n",query(l,r));}}return 0;
}

转载于:https://www.cnblogs.com/dancer16/p/6882430.html

一维数状数组区间修改,查询相关推荐

  1. 校门外的树——树状数组+区间修改

    校门外的树 [题目分析]题目描述的是一种区间修改,看起来好像要用线段树.但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的.毕竟树状数组更加简单. 我们的关注点应该 ...

  2. 树状数组区间修改和区间求和

    最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...

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

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

  4. UESTC 1601 艾尔大停电2 二维树状数组+区间更新

    艾尔大停电2 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  S ...

  5. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  6. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  7. 【模板】一维树状数组

    ACM模板 目录 聊聊前缀和 什么是树状数组? 树状数组相关操作 局限性 差分在树状数组中的应用 区间更新.单点查询 区间更新.区间查询 树状数组应用 聊聊前缀和 比如数组 int a[7]={1,2 ...

  8. 树状数组 区间update/query

    Re [问题引入] 对于区间修改.区间查询这样的简单问题,打一大堆线段树确实是不划算,今天来介绍一下区间查询+区间修改的树状数组 [一些基础] 树状数组的基本知识不再介绍,请自行百度 我们假设sigm ...

  9. CF869E The Untended Antiquity(二维数状数组+差分+hash)

    考虑什么情况会不可达,当覆盖两点的最小矩形不同时,一定不可达.因此我们需要快速的知道覆盖一个点的最小矩形是哪个.我们考虑每次把一个矩形染色,那么复杂度是不可接受的.联想到我们一维做区间加法,单点查询时 ...

最新文章

  1. 2016-11-15试题解题报告
  2. python 列表去重(数组)的几种方法_python 列表去重(数组)的几种方法
  3. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(7)签到题5题
  4. 【Qt】运行报错Could not create directory “E:\xxxx-Debug“
  5. 摩拜6亿美元融资之后:终极目标是打造全球移动物联网
  6. There appears to be trouble with your network connection
  7. stm32的人体红外传感器的初步使用
  8. ApiCloud组件
  9. 计算机科学专业博士,美国留学:布兰迪斯大学计算机科学博士专业简介
  10. 【验证狼人杀三行定律】
  11. 光模块价格由带宽还是距离决定_广州单模光模块价格
  12. Java1Java2
  13. c语言区间内质数和合数各自输出
  14. 2022-12-03:部门工资最高的员工。以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。sql语句如何写? 输出结果如下: department emp
  15. 【Unity】相机视锥体剔除算法
  16. 51单片机声控语音PWM风扇可自动温控定时调速风扇转速显示
  17. 加推科技智能名片加冕36氪WISE 2018新经济之王
  18. 微信签名 play_回答有关Play应用签名的常见问题
  19. 怎么把jpeg改成pdf格式
  20. 20个专业在线配色网站分享

热门文章

  1. python 处理异常_Python异常处理– Python尝试除外
  2. 去掉windows10“更新并关机”
  3. JVM教程:JM内存分哪几个区,每个区的作用是什么?
  4. 一脸懵逼的算法系列之汉诺塔
  5. awk的基本使用方法
  6. display:none与visible:hidden的区别 ?
  7. 怎样在spyder中暂停程序的运行
  8. 树莓派4B开机自动挂载移动硬盘,以及遇到the root account is locked问题
  9. ubuntu,win10 释放IP,重新获取IP
  10. tensorflow : gfile 函数