模板:(数据结构:线段树)
2014-08-01 00:27
190 查看
模板如下,注意数中对应的数组大小要为题目要求大小的4倍才可以保证不会RE
代码如下:
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 50010 #define LL long long using namespace std; int sum[MAXN<<2]; void pushUp(int rt) {//当前根对应的值为左右孩子值之和 sum[rt] = sum[rt<<1]+sum[rt<<1|1]; } void build(int l, int r, int rt) {//递归建树过程 if(l == r) { scanf("%d", &sum[rt]); return ; } int m = (l+r) >> 1; build(l, m, rt<<1); build(m+1, r, rt<<1|1); pushUp(rt); } void update(int p, int add, int l, int r, int rt) {//单点更新,令p点对应值+add, l r表示左右边界, rt表示根节点 if(l == r) { sum[rt] += add; return ; } int m = (l+r) >> 1; if(p <= m) update(p, add, l, m, rt<<1); else update(p, add, m+1, r, rt<<1|1); pushUp(rt); } int query(int L, int R, int l, int r, int rt) {//统计L R之间的叶节点之和,l r表示左右边界, rt表示根节点 if(L<=l && r<=R) return sum[rt]; int m = (l+r) >> 1; int ret = 0; if(L <= m) ret += query(L, R, l, m, rt<<1); if(R > m) ret += query(L, R, m+1, r, rt<<1|1); return ret; }
相关文章推荐
- [ACM_数据结构] 线段树模板
- 【数据结构】树状数组模板--CODE[VS] 1080线段树练习and1081线段树练习2
- 数据结构_线段树_基础模板
- ACM常用模板——数据结构——线段树
- 数据结构之线段树
- 线段树(递归)模板
- 线段树模板 hdu 敌兵布阵
- HDU—1394—Minimum_Inversion_Number—【数据结构】【线段树】【单点更新】
- [线段树](模板题)线段树1(或称线段树:加法)
- COJ 0359 xjr考考你数据结构(根号2)线段树区间增加
- P3373 【模板】线段树 2
- [数据结构]线性表之单链表的类模板实现
- hihocoder #1336 : Matrix Sum 二维线段树 或 二维树状数组模板
- 数据结构专题——线段树
- 数据结构--线段树--lazy延迟操作
- 数据结构-超强超实用高精度模板之高精度bign类与高精度运算符重载
- 数据结构学习——线段树
- 基本线段树模板(建树、点/区间修改、查询)
- COJ 1010 WZJ的数据结构(十) 线段树区间操作
- 数据结构模板