线段树 --- 适用于修改性的求区间问题 【单点修改】
来源:互联网 发布:互联网软件开发工资 编辑:程序博客网 时间:2024/05/27 01:18
这里说的是单点修改.
模板题
不同于RMQ,RMQ修改后再去处理,复杂度就会很高. 而线段树修改和询问都还是会保持在logn的复杂度之内.
AC Code 和 板子: (求区间最大,最小,区间和稍微修改下就行了, 如果有多种东西(比如说有lazy标记, 或者同时维护多种关系等)要存,直接在结构体中添加相应的元素即可,然后修改一些地方的判断)
//直接用就行了.
const int maxn = 1e6+5;int n;int a[maxn];struct Tree{ int tl,tr; int minn,maxx;}tree[maxn<<2];void pushup(int id){ tree[id].minn = min(tree[id<<1].minn , tree[id<<1|1].minn); tree[id].maxx = max(tree[id<<1].maxx , tree[id<<1|1].maxx);}void build(int l,int r,int id){ tree[id].tl = l, tree[id].tr = r; if(l == r){ tree[id].maxx = tree[id].minn = a[l]; return ; } int mid = (r+l)>>1; build(l,mid,id<<1); build(mid+1,r,id<<1|1); pushup(id);}void update(int pos,int val,int id){ int l = tree[id].tl, r = tree[id].tr; if(l == r){ tree[id].maxx = tree[id].minn = val; return ; } int mid = (l+r) >> 1; if(pos <= mid) update(pos,val,id<<1); else update(pos,val,id<<1|1); pushup(id);}int mi,mx;void query(int ql,int qr,int id){ int l = tree[id].tl, r = tree[id].tr; if(ql <= l && qr >= r ){ mi = min(mi,tree[id].minn); mx = max(mx,tree[id].maxx); return ; } int mid = (l + r) >> 1; if(ql <= mid) query(ql,qr,id<<1); if(qr > mid) query(ql,qr,id<<1|1);}void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } build(1,n,1); int q; scanf("%d",&q); while(q--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); mi = inf; // mx = 0; 反正需要就改就是了. if(a == 0) query(b,c,1),printf("%d\n",mi); //或者是mx. else update(b,c,1); }}
阅读全文
0 0
- 线段树 --- 适用于修改性的求区间问题 【单点修改】
- 线段树 单点修改,区间修改
- hihoCoder 1077 RMQ问题再临-线段树 单点修改,求区间最小值
- 【数据结构】【线段树】单点修改区间查询
- 线段树(单点修改,区间查询)
- 【线段树】区间求和+单点修改
- 【线段树】单点求值+区间修改
- 线段树(区间修改,单点查询)
- HDU1166 线段树 单点修改、区间查询
- [模板练习]线段树的单点修改和区间查询
- 算法训练 操作格子 线段树 单点修改,求区间和,区间最大值
- 线段树系列-hdu-1754-I Hate It-单点修改求区间最值
- 线段树系列-hdu-1394-Minimum Inversion Number-单点修改区间求和(求逆序对)
- [线段树] [求区间最大] [定点修改]
- zoj3911 线段树区间修改与求素数的结合
- 线段树的区间修改
- 线段树(单点修改)
- #bzoj3186#单点修改的RMQ问题(zkw线段树版)
- 【poj】3126 Prime Path(bfs)
- 设置mysql递增主键的起始值
- python中用字典实现三级菜单
- js split方法针对单个"\"反斜杠
- java.lang.reflect.UndeclaredThrowableException
- 线段树 --- 适用于修改性的求区间问题 【单点修改】
- Hibernate学习笔记 -- day01 Hibernate介绍及入门案例环境搭建
- 常用的知识点纪录
- spring的基本知识
- python--文件操作(I/O)
- TFTP与FTP的比较
- fzu 2233 贪心并查集
- Python——pyquery解析html
- Spring 中注解