题目:A Simple Problem with Integers

#include <stdio.h>
#define N 111111
#define LL long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
LL add[N<<2];
LL sum[N<<2];
void PushUP(int rt)
{
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void PushDown(int rt,int m)
{
if(add[rt])
{
add[rt<<1]+=add[rt];
add[rt<<1|1]+=add[rt];
sum[rt<<1]+=(m-(m>>1))*add[rt];
sum[rt<<1|1]+=(m>>1)*add[rt];
add[rt]=0;
}
}
void Build(int l,int r,int rt)
{
add[rt]=0;
if(l==r)
{
scanf("%I64d",&sum[rt]);
return;
}
int m=(l+r)>>1;
Build(lson);
Build(rson);
PushUP(rt);
}
void Update(int L,int R,int c,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
add[rt]+=c;
sum[rt]+=(LL)c*(r-l+1);
return;
}
PushDown(rt,r-l+1);
int m=(l+r)>>1;
if(L<=m)
Update(L,R,c,lson);
if(R>m)
Update(L,R,c,rson);
PushUP(rt);
}
LL Query(int L,int R,int l,int r,int rt)
{
if(L<=l&&R>=r)
return sum[rt];
PushDown(rt,r-l+1);
int m=(l+r)>>1;
LL ret=0;
if(L<=m)   ret+=Query(L,R,lson);
if(R>m)    ret+=Query(L,R,rson);
return ret;
}
int main()
{
int m,n;
scanf("%d%d",&n,&m);
Build(1,n,1);
while(m--)
{
char s[5];
int a,b,c;
scanf("%s",s);
if(s[0]=='Q')
{
scanf("%d%d",&a,&b);
printf("%I64d\n",Query(a,b,1,n,1));
}
else
{
scanf("%d%d%d",&a,&b,&c);
Update(a,b,c,1,n,1);
}
}
return 0;
}

线段树POJ3468(成段更新,区间求和)相关推荐

  1. NYOJ 1068 ST(线段树之 成段更新+区间求和)

    ST 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 "麻雀"lengdan用随机数生成了后台数据,但是笨笨的他被妹纸的问题给难住了... 已知len ...

  2. 线段树(成段更新,区间求和lazy操作 )

    hdu1556 Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  3. 线段树HDU1698(成段更新)

    题目:Just a Hook 延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候. #include <stdio.h> ...

  4. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)

    题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.  这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...

  5. HDU 3397 Sequence operation 线段树 成段更新 区间合并

    比较综合的题. 两个标记  setv,xorr.setv的优先级高于xorr,当一个节点获得一个setv时,他之前的xorr要清除. //#pragma comment(linker, "/ ...

  6. HDOJ 1698 Just a Hook(线段树成段更新)

    题意: 屠夫的钩子区间是1~n,每段可能由铜,银,金组成,价值分别为1,2,3,进行一系列的更新之后,求钩子的总价值. 思路: 线段树的成段更新:要设置一个临时的线段树,每次更新的时候把更新段的值放在 ...

  7. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  8. [HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027 RT,该题要求每次更新是更新所有节点,分别求平方根,查询是求和.昨晚思前想后找有没有一个数学上的 ...

  9. HDU 1166 敌兵布阵(线段树:点更新,区间求和)

    HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...

最新文章

  1. 机器学习系列 5:特征缩放
  2. 使用RSA私钥或pfx私钥签名String
  3. 关于python中程序流程结构-四、python基础(程序目录结构规范)
  4. 谷歌技术主管:当我们选择工作时,什么最重要?
  5. 详解MES系统在钢铁企业的应用分析
  6. Java基础知识总结(超详细整理)
  7. snipaste如何滚动截图_试用了20个截图工具,我写下这份超全的软件指南
  8. 木材图像远程鉴定系统开发与实现
  9. 用python画太阳花的代码_Python画太阳花
  10. 计算机课程设计心得,课程设计心得体会 -心得
  11. TC流量控制HTB示例
  12. Web前端鼠标变小手CSS和JS(Vue)两种实现
  13. Python获取高德POI(关键词搜索法)
  14. 前端技术猜想-2018
  15. 计算机网络五要素,网络安全五个基本要素是什么
  16. WIFI设备配网之微信小程序开发AP配网
  17. 主机端的入侵检测,难啃到让人想放弃!
  18. OUC软件开发实验5
  19. Windows 通过编辑注册表设置左右手使用习惯更改 Popup 弹出位置
  20. 5位评委对参赛选手进行打分,将所有的打分结果存储到对应类型的数组中, 将所有的评分结果去除一个最低分,去除一个最高分,然后获取的平均分数为 选手的最终得分.设计程序,用键盘输入5位评委的评分,并打印输

热门文章

  1. 字符串转换成ascii码
  2. 获取Class类对象的三种方式
  3. aop简介-aop开发明确的事
  4. 字符输出流写数据的其他方法
  5. Btree索引和Hash索引
  6. SpringBoot 上传多个文件
  7. 一种非常实用的系统掉电检测和保护电路---摘自:周立功单片机
  8. 如何才算掌握Java(J2SE篇)
  9. 第二十一章:变换(三)
  10. 解决appium安装app时某些手机弹出的提示框