线段树模板
2014-08-14 20:21
204 查看
单点更新,区间求和:
区间更新,区间求和:
#define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int NV = 100005; int sum[NV<<2]; void PushUp(int rt) { sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void build(int l,int r,int rt=1) { if (l == r) { sum[rt]=0; return ; } int m = (l + r) >> 1; build(lson); build(rson); PushUp(rt); } void update(int L,int c,int l,int r,int rt=1) { if (L == l && l == r) { sum[rt] += c; return ; } int m = (l + r) >> 1; if (L <= m) update(L , c , lson); else update(L , c , rson); PushUp(rt); } int query(int L,int R,int l,int r,int rt=1) { if (L <= l && r <= R) return sum[rt]; int m = (l + r) >> 1; int ret = 0; if (L <= m) ret += query(L , R , lson); if (m < R) ret += query(L , R , rson); return ret; } int main() { return 0; }
区间更新,区间求和:
#define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int NV = 100005; long long add[NV<<2],sum[NV<<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] += add[rt] * (m - (m >> 1)); sum[rt<<1|1] += add[rt] * (m >> 1); add[rt] = 0; } } void build(int l,int r,int rt=1) { add[rt] = 0; if (l == r) { scanf("%lld",&sum[rt]); return ; } int m = (l + r) >> 1; build(lson); build(rson); PushUp(rt); } void update(int L,int R,long long c,int l,int r,int rt=1) { if (L <= l && r <= R) { add[rt] += c; sum[rt] += c * (r - l + 1); return ; } PushDown(rt , r - l + 1); int m = (l + r) >> 1; if (L <= m) update(L , R , c , lson); if (m < R) update(L , R , c , rson); PushUp(rt); } long long query(int L,int R,int l,int r,int rt=1) { if (L <= l && r <= R) { return sum[rt]; } PushDown(rt , r - l + 1); int m = (l + r) >> 1; long long ret = 0; if (L <= m) ret += query(L , R , lson); if (m < R) ret += query(L , R , rson); return ret; } int main() { return 0; }
相关文章推荐
- 线段树,不带延迟的模板
- 线段树模板
- 【模板】主席树/函数式线段树/可持久化线段树
- 线段树区间更新,区间求和,最大值,最小值模板
- leetcode@ [307] Range Sum Query - Mutable / 线段树模板
- 线段树(模板)
- 主席树练习1——P3834 【模板】可持久化线段树 1(主席树)
- 线段树模板
- poj 3468..(存线段树个人模板(自敲)pushdown函数还不理解)
- 【常用模板】 线段树单点操作
- HDU 1166 线段树模板&树状数组模板
- poj 3468 线段树 lazy标记模板
- 线段树 面积并 模板题
- Hihocoder #1077 : RMQ问题再临-线段树(线段树:结构体建树+更新叶子往上+查询+巧妙使用father[]+线段树数组要开大4倍 *【模板】)
- 线段树练习 3&P3372 【模板】线段树 1
- 线段树模板
- 线段树(模板)
- hdu 1166 线段树,树状数组模板
- 线段树区间更新模板
- 线段树模板(区间和最大值最下值)