wikioi1082 线段树和lazy思想
来源:互联网 发布:sql创建存储过程语法 编辑:程序博客网 时间:2024/06/05 15:36
</pre>最原始的lazy思想,注意在update的时候lazy只会更新到所在区间,往下就不会更新了,所以在查询的时候要pushdown更新下端区间。<pre name="code" class="cpp">#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define lson l , m , rt<<1#define rson m+1 , r , rt<<1|1using namespace std;#define maxn 900000int n;long long sum[maxn],lazy[maxn];void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void pushdown(int rt,int num){ if(lazy[rt]) { lazy[rt<<1]+=lazy[rt]; lazy[rt<<1|1]+=lazy[rt]; sum[rt<<1]+=(num-(num>>1))*lazy[rt];//左区间多一个 sum[rt<<1|1]+=(num>>1)*lazy[rt]; lazy[rt]=0; }}void build(int l,int r,int rt){ lazy[rt]=0; int m=(l+r)>>1; if(l==r) { scanf("%lld",&sum[rt]); return ; } build(lson); build(rson); pushup(rt); return ;}void update(int l,int r,int rt,int x,int y,long long add)//更新函数{ if(x<=l &&r<=y) { lazy[rt]+=add; sum[rt]+=add*(r-l+1); return; } int m=(l+r)>>1; pushdown(rt,(r-l+1)); if(x<=m) update(lson,x,y,add); if(y>m) update(rson,x,y,add); pushup(rt); return;}long long query(int l,int r,int rt,int x,int y)//查询函数{ long long tmp=0; int m=(l+r)>>1; if(x<=l &&r<=y) { return sum[rt]; } pushdown(rt,(r-l+1)); if(x<=m) tmp+=query(lson,x,y); if(y>m) tmp+=query(rson,x,y); return tmp;}int main(){ char a; int n,q; int x,y; long long z; while(scanf("%d",&n)!=EOF) { int b,c; long long d; build(1,n,1); scanf("%d",&q); while(q--) { int flag; scanf("%d",&flag); if(flag==1) { scanf("%d%d%lld",&x,&y,&z); update(1,n,1,x,y,z); } else { scanf("%d%d",&x,&y); printf("%lld\n",query(1,n,1,x,y)); } } } return 0;}
0 0
- wikioi1082 线段树和lazy思想
- 线段树--lazy思想
- 【wikioi1082】 线段树练习 3
- wikioi1082【线段树练习 3 】
- poj2777线段树+lazy思想
- 线段树入门&lazy思想
- POJ3468-线段树+lazy思想
- 线段树入门&lazy思想
- 线段树入门&lazy思想
- POJ3468(线段树+lazy思想)
- POJ 3667(线段树+lazy思想)
- poj 3468(线段树+lazy思想)
- hdu--3468(线段树+lazy思想)
- poj 3468(线段树 lazy思想)
- POJ3468(线段树+lazy思想)
- POJ 2777 线段树+lazy思想 + 染色问题
- POJ 2777 Count Color(线段树、lazy思想)
- POJ 2777 Count Color (线段树、lazy思想)
- a20 和imx6q
- mysql免安装版配置方法
- SQL SERVER中将秒数转换成时分秒
- linux内核实验0
- 相似图片搜索的三种哈希算法
- wikioi1082 线段树和lazy思想
- 初来乍到。
- HDL输入设计详解攻略
- C++链表的创建与操作
- MySQLdb库连接MySQL数据库
- 【quartus】原理图输入设计详解攻略
- 黑马程序员_异常及处理
- c++ ActiveX基础:使用VS2010创建MFC ActiveX工程项目
- JAVA 对象的初始化过程