题目大意:
有N,M两个数
Q 表示查询, 后面两个数a b,表示查询从a 到b计算它们的和
C 表示增加   后面三个数a,b,c 表示从a开始,一直到b,每个数都增加c

除了查询要进行输出,增加不要输出

#include<iostream>
using namespace std;
#define LL(x)((x)<<1)
#define RR(x)((x)<<1|1)
struct_Seg_Tree{int left,right;long long sum;int add;int calmid(){return (left+right)/2;}int caldis(){return right-left+1;}
}tt[1000000];
int val[1000002];long long build(int l,int r,int idx){tt[idx].left=l;tt[idx].right=r;tt[idx].add=0;if(l==r){return tt[idx].sum=val[l];}return tt[idx].sum=build(l,mid,LL(idx)+build(mid+1,r,RR(idx)));
}     void update(int l,int r,int add,int idx){if(l<=tt[idx].left&&r>=tt[idx].right){tt[idx].add+=add;tt[idx].sum+=(long long)tt[idx].caldis()*add;//通过乘以后来添加的数 return ; }if(tt[idx].add){tt[LL(idx).sum]+=(long long)tt[LL(idx)].caldis()*tt[idx].add;tt[RR(idx).sum]++(long long)tt[RR(idx)].caldis()*tt[idx].add;tt[LL(idx)].add+=tt[idx].add;tt[RR(idx)].add+=tt[idx].add;tt[idx].add=0; }int mid=tt[idx].calmid();if(l<=mid) update(l,r,add,LL(idx));if(mid<r) update(l,r,add,RR(idx)); tt[idx].sum = tt[LL(idx)].sum + tt[RR(idx)].sum;
}long long query(int l,int r,int idx){if(l==tt[idx].left&&r==tt[idx].right){return tt[idx].sum;}if(tt[idx].add){tt[LL(idx)].sum += (long long )tt[LL(idx)].caldis() * tt[idx].add;tt[RR(idx)].sum += (long long)tt[RR(idx)].caldis() * tt[idx].add;tt[LL(idx)].add += tt[idx].add;tt[RR(idx)].add += tt[idx].add;tt[idx].add = 0;}int mid=tt[idx].calmid();if(r<=mid){return query(l,r,LL(idx));} else if(mid<1){return query(l,r,RR(idx));} else{return query(l,mid,LL(idx)+query(mid+1,r,RR(idx));}
}int main(){int n,m;while(scanf("%d %d",&n,&m)==2){for(int i=1;i<=n;i++)scanf("%d",&val[i]);build(1,n,1);while(m--){char com[2];scanf("%s",com);if(com[0]=='Q'){int a,b;scanf("%d %d",&a,&b);pirntf("lld\n",query(a,b,1));}else{int a,b,c;scanf("%d %d %d",&a,&b,&c);update(a,b,c,1);}} }
}

PKU 3468 A Simple Problem with Integers相关推荐

  1. 线段树专辑—— pku 3468 A Simple Problem with Integers

    http://poj.org/problem?id=3468 典型的一道基于lazy传递的线段树题目,这题和一般题目不同的地方在于,它的每次操作不是简单的覆盖线段,而是累加.记得第一次写的时候纠结了好 ...

  2. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  3. poj 3468 A Simple Problem with Integers(线段树区区)

    题目链接:  http://poj.org/problem?id=3468 题目大意:  给出N个数,和M次查询 C a b c  区间[a,b]的值都加上c Q a b     查询区间[a,b]值 ...

  4. POJ 3468 A Simple Problem with Integers(线段树:区间更新)

    http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...

  5. POJ 3468 A Simple Problem with Integers

    分析:这题wa了好多次(看了下discuss好多人也是这样,好题~).一处是sum值会超int32,要用int64.还有一处是toadd要累加,我不知道是受上一题影响还是怎的..pushdown的时候 ...

  6. POJ 3468 A Simple Problem with Integers (1)

    POJ_3468(1) 在消化了PPT上思想之后,又重新做了一下这个题目. 不妨将原数组的元素记作a[i],然后我们用堆建立两棵线段树,一棵的原数组为x[i](x[i]=a[i]-a[i-1],即原数 ...

  7. POJ - 3468 A Simple Problem with Integers(分块)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次操作,每次操作分为两种情况: C l r d:区间 [ l , r ] 内的数字都加上 d Q l r :查询 [ l , r ...

  8. POJ 3468 A Simple Problem with Integers(线段树区间更新)

    题目链接 这个真费劲...其实我也不懂 为什么...大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除...多敲几遍,多调试一 ...

  9. poj 3243:A Simple Problem with Integers

    3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制:  5000ms  单个测试点时间限制:  2000ms  内存限制:  131072 ...

  10. PKU A Simple Problem with Integers 3468

    代码来自网上(非原创) /*题目地址 对于Q操作,求出区间的总和,对于C操作,将区间里的所有数都加上同一个数 考虑结点存放两个信息,一个是该结点区间内的和s,一个是该区间所有数的增量d,对于一个C操作 ...

最新文章

  1. 利用数据存储技术实现数据安全合理备份
  2. jvm:类加载器和类的加载过程
  3. Android 使用jtds远程访问数据库
  4. linux下mqm添加用户,Linux 下MQ的安装和配置亲测
  5. 让VS2005用起来更顺手
  6. 父亲节重读朱自清先生的《背影》
  7. ThreadLocal原理机制
  8. 通过命令在navicat中创建数据库及表结构
  9. 学习pytorch: API 学习
  10. 《数字图像处理》冈萨雷斯版 读书笔记(一)
  11. sobel边缘检测java_Sobel边缘检测
  12. 联想启天M4880(老机)安装Centos7安装总结
  13. Mac Sublime Text设置中文
  14. 去掉小数点后多余的0
  15. 摩拜单车深度产品体验报告
  16. mysql5.7应该导什么包_限定盲盒!只有快递小哥可以拆的“战马空投箱”…到底什么来头?...
  17. 计算机应用基础(专)【10】
  18. 如何快速有效提升网站的百度排名
  19. 轨道看盘系统 通达信选股公式 看盘指标详解主图/副图
  20. python将mp4转mp3

热门文章

  1. easyui下拉选项多怎么解决_30岁以后皮肤松弛皱纹越来越多怎么办?这组瑜伽帮你解决...
  2. Java基础学习(4)-动态代理
  3. DataTable多表合并 同结构和不同结构的合并
  4. mac OS X下终端使用tree命令列目录
  5. c++中#pragma用法详解
  6. 去掉softmax后Transformer会更好吗?复旦华为诺亚提出SOFT:轻松搞定线性近似
  7. 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光等...
  8. 在手机上实现实时的单目3D重建
  9. 有哪些激光雷达SLAM算法?
  10. java4选择结构 二