[P3372][模板]线段树1
来源:互联网 发布:如何删除淘宝精选 编辑:程序博客网 时间:2024/05/20 14:19
原题链接
线段树第一弹
放个板子题
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<queue>#include<vector>#include<climits>#include<string>#include<cstdlib>#include<ctime>#define MOD 1000000007#define LL long longusing namespace std;struct nico{ int lazy,l,r,len; LL sum;}point[800005];int n,a[200005],d,b,c,q,mark,i;LL t;void build(int lef,int rig,int p){ int mid; point[p].l=lef; point[p].r=rig; point[p].len=rig-lef+1; if(lef==rig) { point[p].sum=a[lef]; return; } mid=(lef+rig)>>1; build(lef,mid,p<<1); build(mid+1,rig,(p<<1)+1); point[p].sum=point[p<<1].sum+point[(p<<1)+1].sum; }void pushdown(int p){ point[p<<1].lazy+=point[p].lazy; point[(p<<1)+1].lazy+=point[p].lazy; point[p<<1].sum+=1ll*point[p].lazy*point[p<<1].len; point[(p<<1)+1].sum+=1ll*point[p].lazy*point[(p<<1)+1].len; point[p].lazy=0;}void add(int al,int ar,int x,int p){ int mid,lef,rig; lef=point[p].l; rig=point[p].r; if(ar<lef||al>rig) return; if(al==lef&&ar==rig) { point[p].lazy+=x; point[p].sum+=1ll*x*point[p].len; return; } mid=(lef+rig)>>1; if(point[p].lazy>0) pushdown(p); if(ar<=mid) add(al,ar,x,p<<1); if(al>mid) add(al,ar,x,(p<<1)+1); if(al<=mid&&ar>mid) { add(al,mid,x,p<<1); add(mid+1,ar,x,(p<<1)+1); } point[p].sum=point[p<<1].sum+point[(p<<1)+1].sum; }LL search(int al,int ar,int l,int r,int p){ int mid; if(ar<l||al>r) return 0; if(al==l&&ar==r) return point[p].sum; mid=(l+r)>>1; if(point[p].lazy>0) pushdown(p); if(ar<=mid) return search(al,ar,l,mid,p<<1); if(al>mid) return search(al,ar,mid+1,r,(p<<1)+1); if(al<=mid&&ar>mid) return search(al,mid,l,mid,p<<1)+search(mid+1,ar,mid+1,r,(p<<1)+1);}int main(){ scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); build(1,n,1); scanf("%d",&q); for(i=1;i<=q;i++) { scanf("%d",&mark); if(mark==1) { scanf("%d%d%d",&d,&b,&c); add(d,b,c,1); } if(mark==2) { scanf("%d%d",&d,&b); t=search(d,b,1,n,1); printf("%lld\n",t); } } return 0;}
阅读全文
0 0
- [P3372][模板]线段树1
- 【洛谷P3372】【模板】线段树 1
- 洛谷 P3372【模板】线段树 1
- 洛谷P3372 【模板】线段树 1
- 洛谷 P3372 【模板】线段树 1
- 【洛谷P3372】【模板】线段树1
- 洛谷 P3372 线段树模板
- 【洛谷】P3372线段树1 线段树模板
- 洛谷P3372线段树模板1(改段求段)
- 洛谷P3372 【模板】线段树 1(lazy)
- Luogu-P3372 (Lazy_tag 线段树模板)
- 【模板】线段树 区间加,区间求和 (模板题:P3372线段树1)
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3372线段树1)
- 洛谷p3372 线段树模版
- 洛谷 P3372 线段树 1(树状数组做法)
- 关于 线段树 下传(AC) 不做标记 下传(T3)模板洛谷p3372
- 【模板】线段树 1
- 线段树模板1
- Oracle创建用户并授权
- AD设置覆铜的过孔连接方式
- 最简单了解Linux中su和sudo的区别
- WebRTC56版本SDP详细解析
- JavaScript中判断是否存在某属性
- [P3372][模板]线段树1
- 第三方商城框架整理
- MyEclipse配置JDK详解
- IO--字符流操作五种方式及字节流的四种方式+图谱
- 解决delivery optimization占用网络问题
- git 远程仓库的搭建
- java分布式事务的一种简单处理方法
- javaScript被引入的方式
- 切换Centos的yum源,切换为国内的阿里云源和网易163源