线段树(简单模板)
来源:互联网 发布:咨询公司面试数据分析 编辑:程序博客网 时间:2024/06/03 11:18
#define LL long longstruct hh{ int l,r,ls,rs;//l,r为边界,ls,rs为左右儿子的编号 LL date;//权值 }t[800000];LL n,m,num=0,x,y,v,pd,a[200010],add[200010];//add为标记要增大的值的数组 void pushup(int i)//重新求权值 { t[i].date=t[t[i].ls].date+t[t[i].rs].date;}void build(int l,int r)//建树 { num++; add[num]=0; t[num].date =0; int node=num; t[node].l=l; t[node].r=r; if(l!=r) { t[node].ls=num+1; build(l,(l+r)/2); t[node].rs=num+1; build(((l+r)/2)+1,r); pushup(node); } else if(l==r) { t[node].date=a[l]; }}void pushdown(int i)//把标记传下去 { if(add[i]!=0) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { int ls=t[i].ls;int rs=t[i].rs; add[ls]+=add[i];add[rs]+=add[i]; t[ls].date+=add[i]*(t[ls].r-t[ls].l+1); t[rs].date+=add[i]*(t[rs].r-t[rs].l+1); add[i]=0; }}void update(int i,int l,int r,int v)//更新函数 { if(t[i].l==l&&t[i].r==r) { add[i]+=v; t[i].date+=add[i]*(r-l+1); return ; } if(t[i].l==t[i].r) return ; pushdown(i); int z=t[i].l+t[i].r; z/=2; if(r<=z) update (t[i].ls,l,r,v); else if(l>z) update(t[i].rs,l,r,v); else { update(t[i].ls,l,z,v); update(t[i].rs,z+1,r,v); } pushup(i);}LL query(int i,int l,int r)//求和函数 { if(t[i].l==l&&t[i].r==r) return t[i].date ; pushdown(i); int z=(t[i].l+t[i].r)/2; if(r<=z) return query(t[i].ls,l,r); else if(l>z) return query(t[i].rs,l,r); else { return query(t[i].ls,l,z)+query(t[i].rs,z+1,r); } }
阅读全文
0 0
- 线段树(简单模板)
- 简单线段树模板
- 简单线段树模板
- 线段树(模板)
- 线段树(模板)
- (线段树)模板
- 线段树简单入门模板--单点更新
- 线段树模板(poj3468)
- 线段树模板(算法)
- 线段树(学习模板)
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
- 线段树基础与模板与简单应用
- ACM 线段树模板(模板)
- [luogu3373][模板]线段树 2(线段树)
- 洛谷 P3373 【模板】线段树 2 (线段树)
- 线段树的实现(模板)
- 线段树模板(插入,搜索)
- 线段树模板(插入,搜索)
- 【poj 2115】 C Looooops 【CTU Open 2004】
- 【SQL Server学习笔记】14:查漏补缺1(三值谓词,范式,主键/唯一/外键/检查/默认约束)
- Java-二分法查找算法
- codevs 2022 复仇 快速幂 解题报告
- Bazinga
- 线段树(简单模板)
- bzoj 1082: [SCOI2005]栅栏(二分+DFS)
- codevs 1225 八数码难题 搜索+Hash 解题报告
- 重温Servlet学习笔记--session对象
- java设计模式——代理模式
- Hard Refactoring
- ARM编程的编程模式和一些概念理解的地方
- xml-xml与java对象之间的转换(jaxb)
- 在 Windows 上简单的使用 GitHub