线段树区间查询区间更新
来源:互联网 发布:华为手机全球销量知乎 编辑:程序博客网 时间:2024/03/29 14:22
模板
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,rconst int maxn=100000+100;struct node{ int l,r,val,lazy;}tree[maxn*4];void push_up(int rt){ tree[rt].val=tree[rt<<1].val+tree[rt<<1|1].val;}void push_down(int rt,int mid){ if(tree[rt].lazy) { tree[rt<<1].lazy+=tree[rt].lazy; tree[rt<<1|1].lazy+=tree[rt].lazy; tree[rt<<1].val+=tree[rt].lazy*(mid-(mid>>1)); tree[rt<<1|1].val+=tree[rt].lazy*(mid>>1); tree[rt].lazy=0; }}void build(int rt,int l,int r){ tree[rt].l=l; tree[rt].r=r; tree[rt].lazy=0; if(l==r) { scanf("%d",&tree[rt].val); return; } int mid=(l+r)/2; build(lson); build(rson); push_up(rt);}void update(int rt,int l,int r,int w){ if(tree[rt].l==l&&tree[rt].r==r) { tree[rt].lazy+=w; tree[rt].val+=(r-l+1)*w; return; } push_down(rt,tree[rt].r-tree[rt].l+1); int mid=(tree[rt].l+tree[rt].r)/2; if(l>mid) { update(rt<<1|1,l,r,w); } else if(mid>=r) { update(rt<<1,l,r,w); } else { update(lson,w); update(rson,w); } push_up(rt);}int query(int rt,int l,int r){ if(tree[rt].l==l&&tree[rt].r==r) { return tree[rt].val; } push_down(rt,tree[rt].r-tree[rt].l+1); int res=0; int mid=(tree[rt].l+tree[rt].r)/2; if(l>mid) { res+=query(rt<<1|1,l,r); } else if(mid>=r) { res+=query(rt<<1,l,r); } else { res+=query(lson); res+=query(rson); } return res;}int main (){ int n,m; while(~scanf("%d %d",&n,&m)) { build(1,1,n); while(m--) { char ch[2]; scanf("%s",ch); int a,b,c; if(ch[0] == 'Q') { scanf("%d %d", &a,&b); printf("%d\n",query(1,a,b)); } else { scanf("%d %d %d",&a,&b,&c); update(1,a,b,c); } } } return 0;}
阅读全文
0 0
- 线段树--区间更新区间查询--hdu4027
- 线段树区间查询区间更新
- POJ 3468 线段树 区间更新区间查询
- POJ 3468 (线段树,区间更新,查询区间)
- Impossible Boss+SPOJ+线段树区间更新、区间查询
- POJ-3468(线段树区间更新区间查询)
- hdu 5023(线段树区间更新+区间查询)
- POJ 2777 线段树区间查询区间更新
- hdu5316 Magician (线段树+单点更新+区间查询+区间合并)
- 线段树--区间更新-区间查询HDU 1698
- hzau 1207 Candies(线段树 区间更新 区间查询)
- codevs 4919 线段树:区间更新,区间查询(余数)
- zoj (单点更新区间查询:线段树)
- HDU1698线段树区间更新,一次查询
- 线段树单点更新和区间查询
- hdu1166(线段树单点更新区间查询)
- 线段树区间更新
- 线段树区间更新
- git reset hard/soft/mixed区别
- Tomcat的文件夹、配置的个人解读。
- 在windows下使用VirtualEnv
- stm32 内部flash
- 虚函数表的实现
- 线段树区间查询区间更新
- 微信小程序——unionId
- IaaS,PaaS,SaaS 的区别
- pydev在Elipse中使用第三方组件时,显示“Undefined variable from import:xxx()"的解决方案
- CCF 无线网络
- Spring整合JUnit4之java.lang.ExceptionInInitializerError
- 界面底部的edittext被弹出的软键盘覆盖的问题解决方法
- nyoj 1248 海岛争霸
- 安卓_解析