POJ 3468 A Simple Problem with Integers(线段树区间更新)
题目链接
这个真费劲。。。其实我也不懂 为什么。。。大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除。。。多敲几遍,多调试一下,看看中间过程,就应该理解了。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 100001 5 #define ll __int64 6 ll p[4*N],lz[4*N]; 7 void pushup(int rt) 8 { 9 p[rt] = p[rt<<1]+p[rt<<1|1]; 10 } 11 void pushdown(int rt,int m)//消除懒惰标记,m记录区间长度 12 { 13 if(lz[rt]) 14 { 15 lz[rt<<1] += lz[rt];//把他传递给儿子们 16 lz[rt<<1|1] += lz[rt]; 17 p[rt<<1] += lz[rt]*(m - (m>>1));//更新线段树上的元素,注意位运算优先级的比较低啊!! 18 p[rt<<1|1] += lz[rt]*(m>>1); 19 lz[rt] = 0;//消除标记 20 } 21 } 22 void build(int l,int r,int rt)//建树 23 { 24 int m; 25 lz[rt] = 0; 26 if(l == r) 27 { 28 scanf("%I64d%*c",&p[rt]); 29 return ; 30 } 31 m = (l+r)>>1; 32 build(l,m,rt<<1); 33 build(m+1,r,rt<<1|1); 34 pushup(rt); 35 } 36 ll query(int L,int R,int l,int r,int rt)//L,R表示最后查询的区间。l,r表示中间过程历遍的区间。 37 { 38 int m; 39 ll sum = 0; 40 if(l >= L&&r <= R) 41 { 42 return p[rt];//如果l-r在L-R之间的话,直接返回 43 } 44 pushdown(rt,r - l + 1);//消除懒惰标记 45 m = (l + r) >> 1; 46 if(L <= m)//查找 47 sum += query(L,R,l,m,rt<<1); 48 if(R > m) 49 sum += query(L,R,m+1,r,rt<<1|1); 50 return sum; 51 } 52 void update(int L,int R,int l,int r,int rt,int sc) 53 { 54 int m; 55 if(l >= L&&r <= R) 56 { 57 lz[rt] += sc;//标记懒惰 58 p[rt] += sc*(r - l + 1); 59 return ; 60 } 61 pushdown(rt,r-l+1); 62 m = (l + r) >> 1; 63 if(L <= m) update(L,R,l,m,rt<<1,sc); 64 if(R > m) update(L,R,m+1,r,rt<<1|1,sc); 65 pushup(rt); 66 } 67 int main() 68 { 69 int n,m,i,x,y,z; 70 char str[10]; 71 scanf("%d%d",&n,&m); 72 build(1,n,1); 73 for(i = 1; i <= m; i ++) 74 { 75 scanf("%s%d%d%*c",str,&x,&y); 76 if(str[0] == 'Q') 77 { 78 printf("%I64d\n",query(x,y,1,n,1)); 79 } 80 else if(str[0] == 'C') 81 { 82 scanf("%d%*c",&z); 83 update(x,y,1,n,1,z); 84 } 85 } 86 return 0; 87 }
转载于:https://www.cnblogs.com/naix-x/archive/2012/08/10/2632079.html
POJ 3468 A Simple Problem with Integers(线段树区间更新)相关推荐
- 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]值 ...
- 【线段树】【模板】讲解 + 例题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(区间加值) ...
- POJ 3468 A Simple Problem with Integers
分析:这题wa了好多次(看了下discuss好多人也是这样,好题~).一处是sum值会超int32,要用int64.还有一处是toadd要累加,我不知道是受上一题影响还是怎的..pushdown的时候 ...
- POJ 3468 A Simple Problem with Integers (1)
POJ_3468(1) 在消化了PPT上思想之后,又重新做了一下这个题目. 不妨将原数组的元素记作a[i],然后我们用堆建立两棵线段树,一棵的原数组为x[i](x[i]=a[i]-a[i-1],即原数 ...
- POJ 2528 Mayor's posters 贴海报 线段树 区间更新
注意离散化!!!线段树的叶子结点代表的是一段!!! 给出下面两个简单的例子应该能体现普通离散化的缺陷: 1-10 1-4 5-10 1-10 1-4 6-10 普通离散化算出来的结果都会是2,但是第二 ...
- POJ 3468 A Simple Problem with Integers(线段树:区间更新)
http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...
- POJ - 3468 A Simple Problem with Integers(分块)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次操作,每次操作分为两种情况: C l r d:区间 [ l , r ] 内的数字都加上 d Q l r :查询 [ l , r ...
- poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
1 /* 2 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! 3 */ 4 #include<iostream> 5 #include<cstring> 6 ...
- POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
直接将这3题 放一起了 今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...
最新文章
- python mainloop函数_python中的mainloop()函数
- Failed to initialize NSS library
- st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
- 内存中数据模型和大数据持久性
- cname 别名记录 解析过程_西部数码操作解析:如何为服务器创建别名地址
- 《卷积神经网络》学习笔记
- osea/ Overview 概述
- 【bzoj4940】这是我自己的发明
- 通俗版 OSI七层模型,物理介质
- Ubuntu18.04 上 phpvirtualbox 折腾记
- 如何保证kafka消息的可靠性传递?
- Android USBCamera投屏 - 利用UVC协议将手机上的画面有线投屏到Android车机的屏幕上
- 计算机主机的组成部分,计算机主机的组成是有哪些
- 在excel中如何筛选重复数据_EXCEL里如何快速统计重复的次数?
- 江南鹤微信公众号文章采集器,开发完成了!以后再也不发愁采集微信公众号文章了!
- 【零基础学Python】爬虫篇 :第十一节--Python爬虫Urllib用法合集
- iOS、mac开源项目及库(转载)
- Dotween简单安装设置
- 一键非自锁开关电路设计
- 安装海龟绘图类库(turtle)
热门文章
- R语言的特征选择(Feature Selection)包:Boruta和caret
- 人脸验证(四)--CenterLoss
- 双目测距(四)--罗德里格斯变换
- 纯新手DSP编程--5.18--调试(续)
- css不继承上级样式_这个笔记《CSS基本概念》,让菜鸟轻松学会给网页穿外衣
- mysql5.6 主从 延迟_MySQL5.6升级5.7时,出现主从延迟问题排查过程
- 【汇编语言】【ARM扩展资料】数据表示
- Redo Log的逻辑与物理结构
- 一道基础 Java 面试题,但值得很多人反思!
- Oracle和sqlserver数据类型对应