给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:

  1. C l r d,表示把 A[l],A[l+1],…,A[r]都加上 d。
  2. 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-(区间修改,区间查询)的更多相关文章

  1. acwing 243. 一个简单的整数问题2 树状数组 线段树

    地址 https://www.acwing.com/problem/content/description/244/ 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l ...

  2. AcWing 243. 一个简单的整数问题2 | 树状数组

    传送门 题目描述 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d. 2.“Q l r”,表示询问 ...

  3. AcWing 243. 一个简单的整数问题2 (树状数组)打卡

    题目:https://www.acwing.com/problem/content/244/ 题意:区间加,区间查询 思路:我们把原先那个差分数组分解一下 ∑i=1x∑j=1ib[j]=∑i=1x(x ...

  4. AcWing 243. 一个简单的整数问题2

    给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1."C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. 2."Q l r ...

  5. AcWing 243. 一个简单的整数问题2 (树状数组,区间更新/询问)

    题意:区间更新,区间询问. 题解;对于区间更新,我们还是用差分数组\(b_i\)来更新,区间询问时,我们的答案是:\(\sum_{i=l}^{r}\sum_{j=1}^{i}b_j\), 所以,我们搞 ...

  6. AcWing 242. 一个简单的整数问题

    给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如"C l r d",表示把数列中第l~r个数都加d. 第二类指令形如"Q X",表示询问数列中第x个 ...

  7. AcWing:242. 一个简单的整数问题(树状数组)

    给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d. 第二类指令形如“Q X”,表示询问数列中第x个数的值. 对于每个询问,输出一个整数表示 ...

  8. AcWing243一个简单的整数问题2(树状数组+差分+前缀和规律)

    题目地址:https://www.acwing.com/problem/content/244/ 题目描述: 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l r d ...

  9. 一个简单的反射连接程序(修改文件时间,以及创建Windows服务)

    program SvrDemo; uses  Windows,  WinSvc,  winsock; const  RegName = 'SvrDemo'; var  szServiceName: p ...

  10. [POJ3468]关于整数的简单题 (你想要的)树状数组区间修改区间查询

    #include <cstdio> #include <algorithm> #include <cstring> #include <cctype> ...

随机推荐

  1. Windows命令行备份文件

    windows命令行备份文件 0 前言 前段时间,笔者因为在C盘爆满的情况下被windows自动更新了(大概),出现了以下情况: 在试了几种方法后不起作用,无奈下只能重装系统. 在这之前要把之前的一些 ...

  2. 每次SSH执行完都会关闭通道,返回目录,如果想一次执行多步操作,需要多条命令才能达到目的时,用;分割操作指令,一并导入执行

    每次SSH执行完都会关闭通道,返回目录,如果想一次执行多步操作,需要多条命令才能达到目的时,用:分割操作指令,一并导入执行: 例如: self.execmd='cd ../tmp/log/;pwd;t ...

  3. Android 音视频 - EGL 源码解析以及 C++ 实现

    OpenGL 是一个跨平台的 API,而不同的操作系统(Windows,Android,IOS)各有自己的屏幕渲染实现.所以 OpenGL 定义了一个中间接口层 EGL(Embedded Graphi ...

  4. CF1037H Security题解

    根据字典序的定义,位置大的大于长度长的,长度长的大于长度短的. 所以我们贪心,先追求长度长的,再追求后面的位置大的,再追求前面的位置大的. 我们要一个能遍历子串的结构,就选 SAM 得了. 还有个限制 ...

  5. 学习在UMG中创建列表(List View)

    原理 列表中的元素被称为 "Item",每个Item都是一个UObject.你需要为列表指定它的Entry.Entry也是个控件蓝图,它指定了针对于一个Item,它的界面是什么样子 ...

  6. Teamcenter_NX集成开发:通过NXOpen查询零组件是否存在

    之前用过NXOpen PDM的命名空间下的类,现在记录一下通过PDM命名空间下的类查询Teamcenter零组件的信息,也可以用来判断该零组件是否存在. 1-该工程为DLL工程,直接在NX界面调用,所 ...

  7. 解决ubuntu 20.04、22.04 即新版本 fcitx 无法使用的问题

    前提 已在系统设置中将fcitx设置为默认 fcitx开机自启 配置的过程不在本文讨论范围之内 开机自启可通过安装gnome-tweaks配置实现 问题分析流程 手动启动fcitx时提示设置XMODI ...

  8. FlinkSQL自定义函数开发

    本次需求场景主要为实现将flinksql中collect()函数输出的Mutiset(VARCHAR<100>)多行结果转换为字符串. 一.FlinkSQL自定义函数分类 Flink SQ ...

  9. 开发轻量级REST API样板 基于Node.js、MongoDB 通过Mongoose驱动

    ZY.Node.Mongodb https://gitee.com/Z568_568/node.mongodb.git https://github.com/ZHYI-source/ZY.Node.M ...

  10. Java设计模式 —— 桥接模式

    10 桥接模式 10.1 桥接模式概述 Bridge Pattern: 将抽象部分与它的实现部分解耦,使得两者都能够独立变化. 桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独立变化的维度 ...