线段树--按区间建树
来源:互联网 发布:360解压缩软件怎么样 编辑:程序博客网 时间:2024/05/18 17:05
按区间build树,就是为了说明一下向下更新。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100010;int sum[maxn*4];int add[maxn*4];void PushUp(int rt){ sum[rt] = sum[rt*2] + sum[rt*2+1];}void PushDown(int l,int r,int rt){ if(add[rt]) { int m = (l+r)/2; add[rt*2] += add[rt]; add[rt*2+1] += add[rt]; sum[rt*2] += (m-l+1)*add[rt]; sum[rt*2+1] += (r-m)*add[rt]; add[rt] = 0; }}void build(int l, int r, int rt)//建立线段树{ if (l == r) { scanf("%d",&sum[rt]); return; } int m = (l + r) / 2; build(l, m, rt*2); build(m + 1, r, rt*2+1); PushUp(rt);}void update(int x,int y,int c, int l, int r, int rt){ if (x<=l && y>=r) { sum[rt] += c*(r-l+1); add[rt] += c; return; } PushDown(l,r,rt); int m = (l + r) / 2; if (x <= m) update(x, y, c, l, m, rt*2); if(y > m) update(x, y, c, m + 1, r, rt*2+1); PushUp(rt);}int query(int ll, int rr, int l, int r, int rt)//查询线段树{ if (ll <= l && rr >= r) return sum[rt]; PushDown(l,r,rt); int m = (l + r) / 2; int ret = 0; if (ll <= m) ret += query(ll, rr, l, m, rt*2); if (rr > m) ret += query(ll, rr, m + 1, r, rt*2+1); return ret;}int main(){ int n,m,i,j; char d[10]; while(scanf("%d%d",&n,&m)==2) { memset(add,0,sizeof(add)); memset(sum,0,sizeof(sum)); build(1, n, 1); for(i=0;i<m;i++) { scanf("%s",d); int x, y,z; if (d[0] == 'Q') { scanf("%d%d", &x, &y); int ans = query(x, y, 1, n, 1); printf("%d\n", ans); } if (d[0] == 'C') { scanf("%d%d%d",&x,&y,&z); update(x, y, z, 1, n, 1); } } } return 0;}
0 0
- 线段树--按区间建树
- 线段树--按点建树
- 线段树之建树,单点更新以及区间查询
- [模板]线段树的建树、查询、单点更新、区间更新
- HDU3974-Assign the task(线段树+区间建树)
- 线段树--数据结构(建树,查询区间和&&最大值&&最小值)
- Haskell线段树建树
- 线段树的建树
- POJ 3264 Balanced Lineup 线段树 维护区间最大值和最小值 建树
- HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
- 【线段树】入门--引用建树
- 线段树建树思路代码
- 线段树(建树,查询)
- hdu 2795 线段树 建树模版
- 线段树的两种建树模型
- hdu 5367 线段树动态建树
- 【hdu4325】【线段树】Flowers 动态建树
- 线段树 区间合并
- 图像处理opencv2-Rect <vector>排序、合并
- 浏览器PlaceHolder效果
- 全方位解析枚举类
- centos 安装 Sublime Text
- iOS开发指南-JSON篇
- 线段树--按区间建树
- OpenCV的remap使用方法并附源程序
- 图片位图颜色反转
- Velocity 简单Demo
- HTML+CSS基础(六):CSS样式与属性
- mysql innodb 表数据压缩
- CSDN、Github等优秀资源(持续更新)
- python解析发往本机的数据包示例 (解析数据包)
- Missing ios distribution signing identity xcode can request one for you