poj (3468)线段树lazy操作
来源:互联网 发布:真小人 伪君子知乎 编辑:程序博客网 时间:2024/06/06 00:11
题意: 区间每个数加上一个数,询问一个区间之和.
#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <limits.h>#include <string.h>#include <algorithm>#define LL long long#define ls rt<<1#define rs rt<<1|1#define lson L,m,rt<<1#define rson m+1,R,rt<<1|1#define make_m int m=(L+R)/2;using namespace std;const LL N=100005;struct Node{ LL L,R; LL lazy; LL sum;}tree[N*4];LL n,q;void up(LL rt){ tree[rt].sum=(tree[ls].sum+tree[rs].sum);}void down(LL rt,LL c){ if(tree[rt].lazy) { tree[ls].lazy+=tree[rt].lazy; tree[rs].lazy+=tree[rt].lazy; tree[ls].sum+=(c-c/2)*tree[rt].lazy; tree[rs].sum+=(c/2)*tree[rt].lazy; tree[rt].lazy=0; }}void built(LL L,LL R,LL rt){ tree[rt].lazy=0; tree[rt].L=L; tree[rt].R=R; tree[rt].sum=0; if(L==R) { scanf("%lld",&tree[rt].sum); return ; } make_m; built(lson); built(rson); up(rt);}void update(LL l,LL r,LL c,LL rt){ LL L=tree[rt].L; LL R=tree[rt].R; if(L>=l&&R<=r) { tree[rt].lazy+=c; tree[rt].sum+=(LL)c*(R-L+1); return ; } down(rt,R-L+1); make_m; if(l<=m) update(l,r,c,ls); if(r>m) update(l,r,c,rs); up(rt);}LL query(LL l,LL r,LL rt){ LL L=tree[rt].L; LL R=tree[rt].R; if(L>=l&&R<=r) { return tree[rt].sum; } make_m; down(rt,R-L+1); LL ans=0; if(l<=m) ans+=query(l,r,ls); if(r>m) ans+=query(l,r,rs); return ans;}int main(){ LL L,R,c; char ch[20]; scanf("%lld%lld",&n,&q); built(1,n,1); while(q--) { scanf("%s",ch); if(ch[0]=='Q') scanf("%lld%lld",&L,&R), cout<<query(L,R,1)<<endl; else scanf("%lld%lld%lld",&L,&R,&c),update(L,R,c,1); } return 0;}
- poj (3468)线段树lazy操作
- poj 3468 线段树lazy
- Poj 3468 线段树 lazy
- 线段树lazy操作
- poj 3468(线段树+lazy思想)
- POJ 3468 线段树+lazy标记
- poj 3468(线段树 lazy思想)
- poj 3468 线段树区间更新lazy
- poj 3468 线段树 lazy标记模板
- POJ 3468(线段树模板 Lazy)
- poj 3468 很水的线段树lazy操作,为了理解hdu 3954 的 lazy做的。
- poj 3237 树链剖分模板(用到线段树lazy操作)
- POJ3468【线段树lazy操作】
- hdoj1698【线段树Lazy操作】
- poj 3468 A Simple Problem with Integers LAZY线段树
- poj 3468 A Simple Problem with Integers(线段树+lazy)
- poj 3468 线段树区间更新 lazy思想
- poj 2991【线段树-lazy+向量】
- 我的第三个Android应用软件——《新概念3》
- Android定制属于你自己的导航栏
- 设计包含min函数的栈
- 大型网站架构演变和知识体系
- 数理逻辑:谓词演算(目录)
- poj (3468)线段树lazy操作
- XCLNetSearch1.0(ASP.NET通用查询服务器控件)
- 和菜鸟一起学linux总线驱动之初识USB
- 编程之美2.5寻找最大的K个数
- JTextArea的多行整体左缩进与右缩进
- 数理逻辑:谓词演算(1)谓词演算公式
- 如何通过命令查看CentOS版本号
- 全排列
- 1029. Rabbit