题意:

给定一个区间, 每个区间有一个初值, 然后给出Q个操作, C a b c是给[a,b]中每个数加上c, Q a b 是查询[a,b]的和

代码:

 #include <cstdio>
#include <cstring>
using namespace std;
const int maxn = + ;
struct{
long long val, addMark;
}segTree[maxn << ];
long long a[maxn];
int n , m;
void build(int root, int l, int r){
segTree[root].addMark = ; if(l == r){
segTree[root].val = a[l];
return;//记得return
}
int mid = (l+r) >> ;
build(root*, l,mid);
build(root*+, mid + , r);
segTree[root].val = segTree[root*].val + segTree[root*+].val; //回溯时候更新root
}
void push_down(int root,int L, int R){//传入L, R是为了计算左右子树的和, 分别是(mid - L + 1)、(R-mid)
if(segTree[root].addMark != ){
int mid = L + R >> ;
segTree[root*].addMark += segTree[root].addMark;
segTree[root*+].addMark += segTree[root].addMark; segTree[root*].val += segTree[root].addMark * (mid - L + );
segTree[root*+].val += segTree[root].addMark * (R-mid); segTree[root].addMark = ;
}
}
long long query(int root, int L, int R, int QL, int QR){
if(L > QR || R < QL) return ; if(QL <= L && QR >= R) {
return segTree[root].val;
}
push_down(root,L,R);//如果要向下计算记得先pushdown
int mid = L + R >> ;
return query(root*,L,mid,QL,QR) + query(root*+,mid+,R,QL,QR);
}
void update(int root, int L ,int R, int QL, int QR, int val){
if(L > QR || R < QL) return; if(QL <= L && QR >= R){ segTree[root].val += val * (R-L+);
segTree[root].addMark += val;
return;
} push_down(root,L,R);//如果要向下计算记得先pushdown
int mid = L + R >> ;
update(root*, L, mid, QL , QR , val);
update(root*+,mid+, R, QL,QR,val);
segTree[root].val = segTree[root*].val + segTree[root*+].val;//回溯更新root
}
int main()
{
// freopen("1.txt","r", stdin);
while(~scanf("%d %d", &n , &m)){
memset(segTree,,sizeof(segTree)); for(int i = ; i <= n; i++){
scanf("%lld", &a[i]);
}
build(,,n);
while(m--){
char cho[];
scanf("%s", cho);
int x, y;
scanf("%d %d", &x, &y);
if(cho[] == 'C'){
int v;
scanf("%d", &v);
update(,,n,x,y,v);
}
else{
printf("%lld\n",query(,,n,x,y));
}
}
}
}

最新文章

  1. tyvj1191 迎春舞会之三人组舞
  2. springmvc对同名参数处理-我们到底能走多远系列(44)
  3. git ignore 添加忽略文件不生效解决办法
  4. oracle 10g在redhat5下的安装
  5. leetcode98 Validate Binary Search Tree
  6. tcpproxy:基于 Swoole 实现的 TCP 数据包转发工具的方法
  7. Sharepoint 2013 系列篇(安装部署)--上篇
  8. 计算机视觉和人工智能的状态:我们已经走得很远了 The state of Computer Vision and AI: we are really, really far away.
  9. 简单风格 在线音乐播放器(支持wav,MP3等)
  10. [原]Unity3D深入浅出 - 认识开发环境中的GameObject菜单栏
  11. 关于Spring的IOC和DI
  12. 【HDOJ】2255 奔小康赚大钱
  13. Json解析要点
  14. Tessnet2图片识别
  15. Springboot整合Websocket遇到的坑
  16. VUE通过id从列表页跳转到相对的详情页
  17. 模糊查询sql语句条件是中文在后台从数据库查不到结果,是英文和字母就可以,而且统一编码为UTF-8了!!!
  18. Spark记录-SparkSQL远程操作MySQL和ORACLE
  19. 依赖注入的方式测试ArrayList和LinkedList的效率(对依赖注入的再次理解)
  20. C#学习笔记(15)——c#接口

热门文章

  1. 项目上线后出现Bug,该如何处理?
  2. 素数+map BestCoder Round #54 (div.2) 1002 The Factor
  3. 第03课 在VMwave 14.0 上配置企业级CentOS 6.6操作系统
  4. EOJ Monthly
  5. POM报错Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from
  6. Appium + Python自动化 - 元素定位uiautomatorviewer
  7. DOCTYPE详解
  8. 《Python基础教程》 读书笔记 第五章(上)条件语句
  9. ZIP解压缩文件的工具类【支持多级目录|全】
  10. C# 移动开发(Xamarin.Form) Plugin.BLE 蓝牙连接