一维数状数组区间修改,查询
模板题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
一维数状数组区间修改,查询相关推荐
- 校门外的树——树状数组+区间修改
校门外的树 [题目分析]题目描述的是一种区间修改,看起来好像要用线段树.但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的.毕竟树状数组更加简单. 我们的关注点应该 ...
- 树状数组区间修改和区间求和
最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...
- 树状数组的区间修改+查询
首先看树状数组是用来求前缀和比较方便的一种数据结构 sum[i] = Sigma a[i] =Sum(bit[x]) 而区间修改也不难实现 就是引入一个差分数组del del[i]表示对i~n的修改 ...
- UESTC 1601 艾尔大停电2 二维树状数组+区间更新
艾尔大停电2 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询
点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...
- 【模板】一维树状数组
ACM模板 目录 聊聊前缀和 什么是树状数组? 树状数组相关操作 局限性 差分在树状数组中的应用 区间更新.单点查询 区间更新.区间查询 树状数组应用 聊聊前缀和 比如数组 int a[7]={1,2 ...
- 树状数组 区间update/query
Re [问题引入] 对于区间修改.区间查询这样的简单问题,打一大堆线段树确实是不划算,今天来介绍一下区间查询+区间修改的树状数组 [一些基础] 树状数组的基本知识不再介绍,请自行百度 我们假设sigm ...
- CF869E The Untended Antiquity(二维数状数组+差分+hash)
考虑什么情况会不可达,当覆盖两点的最小矩形不同时,一定不可达.因此我们需要快速的知道覆盖一个点的最小矩形是哪个.我们考虑每次把一个矩形染色,那么复杂度是不可接受的.联想到我们一维做区间加法,单点查询时 ...
最新文章
- 2016-11-15试题解题报告
- python 列表去重(数组)的几种方法_python 列表去重(数组)的几种方法
- 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(7)签到题5题
- 【Qt】运行报错Could not create directory “E:\xxxx-Debug“
- 摩拜6亿美元融资之后:终极目标是打造全球移动物联网
- There appears to be trouble with your network connection
- stm32的人体红外传感器的初步使用
- ApiCloud组件
- 计算机科学专业博士,美国留学:布兰迪斯大学计算机科学博士专业简介
- 【验证狼人杀三行定律】
- 光模块价格由带宽还是距离决定_广州单模光模块价格
- Java1Java2
- c语言区间内质数和合数各自输出
- 2022-12-03:部门工资最高的员工。以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。sql语句如何写? 输出结果如下: department emp
- 【Unity】相机视锥体剔除算法
- 51单片机声控语音PWM风扇可自动温控定时调速风扇转速显示
- 加推科技智能名片加冕36氪WISE 2018新经济之王
- 微信签名 play_回答有关Play应用签名的常见问题
- 怎么把jpeg改成pdf格式
- 20个专业在线配色网站分享
热门文章
- python 处理异常_Python异常处理– Python尝试除外
- 去掉windows10“更新并关机”
- JVM教程:JM内存分哪几个区,每个区的作用是什么?
- 一脸懵逼的算法系列之汉诺塔
- awk的基本使用方法
- display:none与visible:hidden的区别 ?
- 怎样在spyder中暂停程序的运行
- 树莓派4B开机自动挂载移动硬盘,以及遇到the root account is locked问题
- ubuntu,win10 释放IP,重新获取IP
- tensorflow : gfile 函数