AcWing 243. 一个简单的整数问题2-(区间修改,区间查询)
给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:
C l r d,表示把 A[l],A[l+1],…,A[r]都加上 d。Q l r,表示询问数列中第 l∼r个数的和。
对于每个询问,输出一个整数表示答案。
输入格式
第一行两个整数 N,M。
第二行 N 个整数 A[i]。
接下来 M行表示 M 条指令,每条指令的格式如题目描述所示。
输出格式
对于每个询问,输出一个整数表示答案。
每个答案占一行。
数据范围
1≤N,M≤1e5,
|d|≤10000,
|A[i]|≤1e9
输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
输出样例:
4
55
9
15
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int N=1e5+5;
int a[N],tr1[N],tr2[N];
int n,m;
int lowbit(int x){
return x&-x;
}
void add(int tr[],int x,int y){
for(int i=x;i<=n;i+=lowbit(i))tr[i]+=y;
}
int query(int tr[],int x){
int res=0;
for(int i=x;i;i-=lowbit(i))res+=tr[i];
return res;
}
int pre(int x){
return (x+1)*query(tr1,x)-query(tr2,x);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
int x=a[i]-a[i-1];
add(tr1,i,x);
add(tr2,i,i*x);
}
while(m--){
string s;
cin>>s;
int x,y,z;
if(s[0]=='C'){
cin>>x>>y>>z;
add(tr1,x,z),add(tr2,x,x*z);
add(tr1,y+1,-z),add(tr2,y+1,(y+1)*-z);
}else{
cin>>x>>y;
cout<<pre(y)-pre(x-1)<<endl;
}
}
return 0;
}
AcWing 243. 一个简单的整数问题2-(区间修改,区间查询)的更多相关文章
- acwing 243. 一个简单的整数问题2 树状数组 线段树
地址 https://www.acwing.com/problem/content/description/244/ 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l ...
- AcWing 243. 一个简单的整数问题2 | 树状数组
传送门 题目描述 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d. 2.“Q l r”,表示询问 ...
- AcWing 243. 一个简单的整数问题2 (树状数组)打卡
题目:https://www.acwing.com/problem/content/244/ 题意:区间加,区间查询 思路:我们把原先那个差分数组分解一下 ∑i=1x∑j=1ib[j]=∑i=1x(x ...
- AcWing 243. 一个简单的整数问题2
给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1."C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. 2."Q l r ...
- AcWing 243. 一个简单的整数问题2 (树状数组,区间更新/询问)
题意:区间更新,区间询问. 题解;对于区间更新,我们还是用差分数组\(b_i\)来更新,区间询问时,我们的答案是:\(\sum_{i=l}^{r}\sum_{j=1}^{i}b_j\), 所以,我们搞 ...
- AcWing 242. 一个简单的整数问题
给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如"C l r d",表示把数列中第l~r个数都加d. 第二类指令形如"Q X",表示询问数列中第x个 ...
- AcWing:242. 一个简单的整数问题(树状数组)
给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d. 第二类指令形如“Q X”,表示询问数列中第x个数的值. 对于每个询问,输出一个整数表示 ...
- AcWing243一个简单的整数问题2(树状数组+差分+前缀和规律)
题目地址:https://www.acwing.com/problem/content/244/ 题目描述: 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l r d ...
- 一个简单的反射连接程序(修改文件时间,以及创建Windows服务)
program SvrDemo; uses Windows, WinSvc, winsock; const RegName = 'SvrDemo'; var szServiceName: p ...
- [POJ3468]关于整数的简单题 (你想要的)树状数组区间修改区间查询
#include <cstdio> #include <algorithm> #include <cstring> #include <cctype> ...
随机推荐
- Javaweb基础知识复习------AJAX
AJAX相关知识复习 简而言之,就是可以用AJAX+HTML代替JSP页面,也可以进行异步交互,更新部分界面 Ajax案例 后端代码就是一个servlet文件,前端页面的代码也不是很常用,可以在下面这 ...
- 记录一次重置数据库root用户的过程
服务器的mysql突然连接不上去了,密码也忘记了.只能重新设置密码了 1.使用如下指令打开mysql数据库配置文件(具体的文件路径以实际情况为准) vim /etc/my.cnf在虚拟机中直接输入即可 ...
- LinkedBlockingQueue出入队实现原理
类图概述 由类图可以看出,L是单向链表实现的,有两个ReentrantLock实例用来控制元素入队和出队的原子性,takeLock用来控制只有一个线程可以从队头获取元素,putLock控制只有一个线程 ...
- eval有时候也可以用,而且有奇效
eval,一个我曾经避之不及的函数,最近我对它产生了一点新的感触:eval有时候也可以用,有奇效. 一般在使用js进行开发时,是不建议使用eval这类函数的.在JavaScript中,eval可以计算 ...
- 剑指 offer 第 3 天
第 3 天 字符串(简单) 剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are h ...
- 源码解读之FutureTask如何实现最大等待时间
预备知识:Java 线程挂起的常用方式有以下几种 Thread.sleep(long millis):这个方法可以让线程挂起一段时间,并释放 CPU 时间片,等待一段时间后自动恢复执行.这种方式可以用 ...
- SaaS、PaaS、IaaS区别
SaaS SaaS 越久,觉得它个庞大的领域 SaaS 收入的"长江流域". 传统软件像买房:什么都得自己买,价格昂贵,一般人用不起.SaaS模式就像是租赁预先装修好的共享公寓,拎 ...
- Edge解决默认Bing搜索跳转到国内版的问题
近期BingGPT申请通过以后,每次用PC端Edge去跳转的时候不管是否念Proxy咒都会进入国内版本Bing,排查得到默认Bing参数如下 因此,在edge://settings/searchEng ...
- 记一次 .NET 某手术室行为信息系统 内存泄露分析
一:背景 1. 讲故事 昨天有位朋友找到我,说他的程序内存存在泄露导致系统特别卡,大地址也开了,让我帮忙看一下怎么回事?今天上午看了下dump,感觉挺有意思,在我的分析之旅中此类问题也蛮少见,算是完善 ...
- 华为 A800-9000 服务器 离线安装MindX DL 可视化环境+监控
MindX DL Sample主要应用于企业的数据中心或超算中心机房中,针对不同的应用场景为客户提供AI深度学习端到端解决方案. 传统行业:用户无自建深度学习平台,希望能够提供简单易用.软硬件一体化的 ...