/*
树状数组第三种模板(改段求段)不解释!
不明白的点这里:here
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 100005
using namespace std; typedef long long LL; LL ss[N], B[N], C[N]; int n, m; void addB(int x, int k){//B[i]表示被1...i整体一共加了多少的总和
for(int i=x; i<=n; i+=i&(-i)) B[i]+=x*k;
} void addC(int x, int k){//1....x节点的每个节点的增量
for(int i=x; i>; i-=i&(-i)) C[i]+=k;
} LL sumB(int x){
LL s=;
for(int i=x; i>; i-=i&(-i)) s+=B[i];
return s;
} LL sumC(int x){//x节点总共的增量
LL s=;
for(int i=x; i<=n; i+=i&(-i)) s+=C[i];
return s;
} LL sum(int x){
return x== ? : sumC(x)*x + sumB(x-);
} void update(int a, int b, int c){
addB(b, c);
addC(b, c);
if(a->){
addB(a-, -c);
addC(a-, -c);
}
} int main(){
int m;
while(scanf("%d%d", &n, &m)!=EOF){
for(int i=; i<=n; ++i){
scanf("%lld", &ss[i]);
ss[i]+=ss[i-];
}
char ch[];
int a, b, c;
while(m--){
scanf("%s", ch);
if(ch[]=='Q'){
scanf("%d%d", &a, &b);
printf("%lld\n", ss[b]-ss[a-]+sum(b)-sum(a-));
}
else{
scanf("%d%d%d", &a, &b, &c);
update(a, b, c);
}
}
}
return ;
}

最新文章

  1. H5+JS+CSS3 综合应用
  2. linux多文本替换内容
  3. [THINKING IN JAVA]初始化和清理
  4. RabbitMQ(五) -- topics
  5. [moka同学笔记]yii2.0小物件的简单使用(第一种方法)
  6. SQL Server 开发指南
  7. LR录制测试脚本
  8. MongoDB - Introduction to MongoDB, Capped Collections
  9. 委托、Lambda和事件
  10. OpenStack Newton版本Ceph集成部署记录
  11. COM学习(三)——COM的跨语言
  12. iOS开发 runtime实现原理以及实际开发中的应用
  13. 如何给 mongodb 设置密码
  14. vue 应用生产环境的 webpack 打包配置优化
  15. 开源的CAS实现SSO
  16. X86汇编语言实现的贪吃蛇游戏
  17. Singleton单例对象的使用
  18. python数据结构之动态数组
  19. LeetCode--066--加一
  20. 5 并发编程-(进程)-队列&amp;生产者消费者模型

热门文章

  1. Linux内核如何装载和启动一个可执行程序
  2. 从range和xrange的性能对比到yield关键字(中)
  3. SpringMVC 架构
  4. text-size-adjust属性
  5. C#类、接口、虚方法和抽象方法0322
  6. php 3种常见设计模式
  7. maven nexus-staging-maven-plugin exception-connect timed out
  8. Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
  9. 怎样用UltraISO制作U盘系统安装盘
  10. Linux 输出文件列数,拼接文件