思路:线段树,区间更新,区间查找

 #include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<set>
#include<algorithm>
#include<cstdio>
#include<map>
#include<cstring>
#include<list> #define MAXSIZE 100010 using namespace std; long long tree[*MAXSIZE];
long long lz[*MAXSIZE];
int N, Q; void init()
{
memset(tree, , sizeof(tree));
memset(lz, , sizeof(lz));
} void build(int node, int l, int r)
{
if(l == r)
{
scanf("%lld", &tree[node]);
return;
} int mid = (l+r)/;
build(node*, l, mid);
build(node*+, mid+, r); tree[node] = tree[node*] + tree[node*+];
} void push_down(int node, int l, int r)
{
if(lz[node])
{
int mid = (l+r)/;
lz[node*] += lz[node];
lz[node*+] += lz[node];
tree[node*] += (mid-l+)*lz[node];
tree[node*+] += (r-mid)*lz[node];
lz[node] = ;
}
} void update_range(int node, int l, int r, int L, int R, int add)
{
if(l <= L && r >= R)
{
lz[node] += add;
tree[node] += (R-L+)*add;
return;
}
push_down(node, L, R);
int mid = (L+R)/;
if(mid >= l)
update_range(node*, l, r, L, mid, add);
if(mid < r)
update_range(node*+, l, r, mid+, R, add);
tree[node] = tree[node*] + tree[node*+];
} long long query_range(int node, int l, int r, int L, int R)
{
if(l <= L && r >= R)
{
return tree[node];
}
push_down(node, L, R);
int mid = (L+R)/;
long long sum = ;
if(mid >= l)
sum += query_range(node*, l, r, L, mid);
if(mid < r)
sum += query_range(node*+, l, r, mid+, R); return sum;
} int main()
{
scanf("%d%d", &N, &Q);
init();
build(, , N);
while(Q--)
{
char ch;
scanf(" %c", &ch);
if(ch == 'Q')
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lld\n", query_range(, a, b, , N));
}
else if(ch == 'C')
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
update_range(, a, b, , N, c);
}
} return ;
}

最新文章

  1. Win10 VC++6 无法启动此程序,因为计算机中丢失mfc42d.dll 需要提升
  2. 【数据采集】VBA数据采集可用 COM 组件
  3. 为docker配置固定ip
  4. Openxml入门---Openxm读取Excel数据
  5. 初探YAML
  6. 为什么NOLOCK查询提示是个不明智的想法
  7. go中间的&amp;和*
  8. networkRequest
  9. php-Mysql示例1
  10. 给Ubuntu 16.04更换更新源
  11. A*算法的理解与简单实现
  12. HTML面试题
  13. 快速开发 HTML5 交互式地铁线路图
  14. jquery $(&#39;#form1&#39;).serialize()序列化提交表单
  15. ili9325--LCD寄存器配置研究
  16. ELK--filebeat nginx模块
  17. VUE中过了一遍还不熟悉的东西
  18. Android SO UPX壳问题小记
  19. 软件申请获取root权限
  20. spark not contain

热门文章

  1. [转].NET4.0新特性集合贴
  2. Maven的作用及简介
  3. 虚拟机vm安装黑群晖6.2
  4. 04_Spring AOP两种代理方法
  5. python3-常用模块之os
  6. 在当前目录打开DOS命令行窗口
  7. 线性SVM分类器实战
  8. java笔试之计算n x m的棋盘格子
  9. java连接SQLserver数据库模板代码
  10. 【深度学习】CNN 中 1x1 卷积核的作用