模板_线段树
来源:互联网 发布:php base64编码 编辑:程序博客网 时间:2024/05/16 18:44
最小值查询
int ql,qr;//查询[ql,qr]最小值int query(int o,int l,int r){ int m=l+(l+r)/2,ans=INF; if(ql<=l&&qr>=r) return minv[o];//包含 if(ql<=m) ans=min(ans,query(o*2,l,m));//left if(m<qr) ans=min(ans,query(o*2+1,m+1,r));//right return ans;}
点修改
int p,v;void updata(int o,int l,int r){ int m=l+(l+r)/2; if(l==r) minv[o]=v;//叶节点 else{ if(p<=m) updata(o*2,l,m);//左子树 else updata(o*2+1,m+1,r);//右子树 minv[o]=min(minv[o*2],minv[o*2+1]); }}
信息维护
void maintain(int o,int l,int r){ int lc=o*2,rc=o*2+1; sumv[o]=minv[o]=maxv[o]=0; if(r>l){ sumv[o]=sumv[lc,rc]; minv[o]=min(minv[lc],minv[rc]); maxv[o]=max(maxv[lc],maxv[rc]); } minv[o]+=addv[o];maxv[o]+=addv[o];sumv[o]+=addv*(r-l+1);}
add操作
void updata(int o,int l,int r){ int lc=o*2,rc=o*2+1; if(y1<=l&&y2>=r){ addv[o]+=v; } else{ int m=l+(l+r)/2; if(y1<=m) updata(lc,l,m); if(y2>m) updata(rc,m+1,r); } maintain(o,l,r);//维护区间信息}
区间查询
int _min,_max,_sum;void query(int o,int l,int r,int add){ if(y1<=l&&r2>=r){ _sum+=sumv[o]+add*(r-l+1); _min=min(_min,minv[o]+add); _max=max(_max,maxv[o]+add); } else{ int m=l+(l+r)/2; if(y1<=m) query(o*2,l,m,add+addv[o]); if(y2>m) query(o*2+1,m+1,r,add+addv[o]); }}
区间全部修改
void updata(int o,int l,int r){ int lc=o*2,rc=lc+1; if(y1<=l&&y2>=r){ setv[o]=v; }else{ pushdown(o); int m=l+(l+r)/2; if(y1<=m) updata(lc,l,m); if(y2>m) updata(rc,m+1,r); } maintain(o,l,r);}
标记传递
void pushdown(o){ int lc=o*2,rc=lc+1; if(setv[o]>=0){ setv[lc]=setv[rc]=setv[o]; setv[o]=-1;//清除标记 }}
set的区间查询
int _min,_max,_sum;void query(int o,int l,int r){ if(setv[o]>=0){ _sum+=setv[o]*(min(r,y2)-max(l,y1)+1); _min=min(_min,setv[o]); _max=max(_max,setv[o]); } else if(y1<=l&&r2>=r){ _sum+=sumv[o]; _min=min(_min,minv[o]); _max=max(_max,maxv[o]); } else{ int m=l+(l+r)/2; if(y1<=m) query(o*2,l,m); if(y2>m) query(o*2+1,m+1,r); }}
1 0
- 线段树_模板
- 模板_线段树
- ACM_模板_线段树
- 数据结构_线段树_基础模板
- 洛谷 3372_【模板】线段树 1_线段树
- 线段_线段树
- 线段_线段树
- 【模板】线段树_区间最值、区间求和、修改
- ACM 线段树模板(模板)
- 线段树_总结
- 箱子_线段树
- 箱子_线段树
- 线段树_初步
- 线段树模板
- hdu_1166_线段树模板
- 线段树模板
- 线段树模板 poj2777
- 线段树模板
- composer新理解
- UWP开发之StreamSocket聊天室(二)
- struct tm 与 time_t
- SpringMVC的几种返回方式
- @SuppressWarnings("resource")
- 模板_线段树
- spring mvc 返回json的配置
- 一个libvirt/qemu创建虚拟机错误的解决办法
- android源码学习之源码编译并nexus s真机刷机
- 转-局部搜索的形象描述
- Windows下文件名或目录的简写方法
- python list中append()与extend()用法分享
- git 常用指令
- SpringMVC返回json数据的三种方式