poj 3468线段树 成段更新
2014-11-27 21:04
274 查看
题意和题目都很简单,就是线段树的成段更新,只要做一下延迟标记就好了。
题意:查询一段数的和,和更新一段数的值。
一开始出了点错误,忘在更新时做延迟标记了。
题意:查询一段数的和,和更新一段数的值。
一开始出了点错误,忘在更新时做延迟标记了。
#include<cstdio> long long sum[100010<<2]; long long add[100010<<2]; void push_up(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void push_down(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){ add[rt]=0; if(l==r){ scanf("%lld",&sum[rt]); return; } int m=(l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1); push_up(rt); } void update(int l,int r,int rt,int x,int L,int R){ if(L<=l&&r<=R){ add[rt]+=x; sum[rt]+=(long long)x*(r-l+1); return; } push_down(rt,r-l+1); int m=(l+r)>>1; if(L<=m){ update(l,m,rt<<1,x,L,R); } if(m<R){ update(m+1,r,rt<<1|1,x,L,R); } push_up(rt); } long long query(int l,int r,int rt,int L,int R){ if(L<=l&&r<=R){ return sum[rt]; } push_down(rt,r-l+1); int m=(l+r)>>1; long long res=0; if(L<=m){ res+=query(l,m,rt<<1,L,R); } if(m<R){ res+=query(m+1,r,rt<<1|1,L,R); } return res; } int main() { int n,T; scanf("%d%d",&n,&T); build(1,n,1); while(T--){ char c[2]; int a,b,d; scanf("%s",c); if(c[0]=='Q'){ scanf("%d%d",&a,&b); printf("%lld\n",query(1,n,1,a,b)); } else{ scanf("%d%d%d",&a,&b,&d); update(1,n,1,d,a,b); } } return 0; }
相关文章推荐
- poj 3468 A Simple Problem with Integers(线段树——成段更新问题)
- 线段树(成段更新) POJ 3468 A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- POJ - 3468 A Simple Problem with Integers(线段树成段更新,查询区间和)
- poj 3468 线段树 成段更新
- poj 3468 A Simple Problem with Integers 线段树 成段更新
- poj 3468 A Simple Problem with Integers(线段树,成段更新)
- poj3468~线段树成段更新求和
- POJ 3468 A Simple Problem with Integers线段树成段更新
- POJ 3468 A Simple Problem with Integers (线段树成段更新)
- POJ -- 3468 --线段树成段更新
- POJ 3468 A Simple Problem with Integers 线段树的成段更新
- 数据结构--线段树--成段更新(poj 3468 裸题)
- [ACM] poj 3468 A Simple Problem with Integers(线段树,成段更新,懒惰标记)
- poj 3468 A Simple Problem with Integers(线段树成段更新,延迟标记,Lazy)
- poj_3468线段树成段更新求区间和
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- poj 3468 线段树成段更新
- POJ 3468 A Simple Problem with Integers(线段树 成段更新)
- [ACM] poj 3468 A Simple Problem with Integers(线段树,成段更新,懒惰标记)