Poj 3468 线段树 lazy
来源:互联网 发布:怎么在淘宝上买账号 编辑:程序博客网 时间:2024/05/22 03:24
#include<iostream>#include<cstdio>#include<cstring>#include<stack>#include<vector>#include<queue>#include<algorithm>#include<map>#define lson l, mid, rt<<1#define rson mid+1, r, rt<<1 | 1using namespace std;typedef long long LL;const int maxn = 100000+10;LL add[maxn<<2];LL sum[maxn<<2];struct tree { int l, r; int mid() { return (l+r)>>1; }}tr[maxn<<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] += 1LL*add[rt]*(m-(m>>1)); sum[rt<<1|1] += 1LL*add[rt]*(m>>1); add[rt] = 0; }}void build(int l, int r, int rt) { tr[rt].l = l; tr[rt].r = r; add[rt] = 0; if (l == r) { scanf("%lld", &sum[rt]); return ; } int mid = tr[rt].mid(); build(lson); build(rson); pushup(rt);}void update(int c, int l, int r, int rt) { if (tr[rt].l == l && tr[rt].r == r) { add[rt] += c; sum[rt] += 1LL*c*(r-l+1); return ; } if (tr[rt].l == tr[rt].r) return ; pushdown(rt, tr[rt].r-tr[rt].l+1); int mid = tr[rt].mid(); if (r<=mid) update(c, l, r, rt<<1); else if (l > mid) update(c, l, r, rt<<1|1); else { update(c, lson); update(c, rson); } pushup(rt);}LL query(int l, int r, int rt) { if (l == tr[rt].l && tr[rt].r == r) { return sum[rt]; } pushdown(rt, tr[rt].r-tr[rt].l+1); int mid = tr[rt].mid(); LL res = 0; if (r <= mid) res += query(l, r, rt<<1); else if (l > mid) res += query(l, r, rt<<1|1); else { res += query(lson); res += query(rson); } return res;}int main() { int n, q; while(~scanf("%d%d", &n, &q)) { build(1, n, 1); char ch[2]; while (q--) { scanf("%s", ch); if (ch[0] == 'C') { int l, r, c; scanf("%d%d%d", &l, &r, &c); update(c, l, r, 1); } else { int l, r; scanf("%d%d", &l, &r); printf("%lld\n", query(l, r, 1)); } } } return 0;}
阅读全文
0 0
- poj 3468 线段树lazy
- Poj 3468 线段树 lazy
- poj (3468)线段树lazy操作
- poj 3468(线段树+lazy思想)
- POJ 3468 线段树+lazy标记
- poj 3468(线段树 lazy思想)
- poj 3468 线段树区间更新lazy
- poj 3468 线段树 lazy标记模板
- POJ 3468(线段树模板 Lazy)
- poj 3468 A Simple Problem with Integers LAZY线段树
- poj 3468 A Simple Problem with Integers(线段树+lazy)
- poj 3468 线段树区间更新 lazy思想
- poj 2991【线段树-lazy+向量】
- POJ 1823 Hotel 线段树 + lazy标签
- poj 3225 线段树注意lazy标记
- POJ 3667(线段树+lazy思想)
- POJ 3225 线段树+lazy标记
- poj 3468 很水的线段树lazy操作,为了理解hdu 3954 的 lazy做的。
- Android—常用控件(五)图片框
- [游戏源码] Unity4.3底层引擎C++源码+完整文档
- 谷歌插件Postman的使用
- 我的低仿“知乎日报”
- 人形Web时间显示
- Poj 3468 线段树 lazy
- 理解并设计rest/restful风格接口
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- 设计模式(组件协作)——策略模式
- Java 多线程 yield方法
- Linux_crond和crontab的用法
- LeetCode算法题目:Pow(x, n)
- 【教程】从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp
- Java反射详解