线段树模板
2017-04-12 19:47
295 查看
//单点替换
#include <iostream> #include <cstdio> using namespace std; const int maxn = 100005; int big[maxn*4]; void build(int l,int r,int rt) { if(l == r) { scanf("%d",&big[rt]); return ; } int mid = (l+r)>>1; build(l,mid,rt*2); build(mid+1,r,rt*2+1); big[rt] = max(big[rt*2],big[rt*2+1]); } void update(int p,int v,int l,int r,int rt) { if(l==r) { big[rt] = v; return; } int mid = (l+r)>>1; if(p<=mid) update(p,v,l,mid,rt*2); else update(p,v,mid+1,r,rt*2+1); big[rt]=max(big[rt*2],big[rt*2+1]); } int query(int b,int e,int l,int r,int rt) { if(b > r || e < l) return -1; if(b <= l && r<=e) { return big[rt]; } int mid = (l+r)>>1; int ans = 0; if(b <= mid) ans = max(ans,query(b,e,l,mid,rt*2)); if(e > mid) ans = max(ans,query(b,e,mid+1,r,rt*2+1)); return ans; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { int a,b,e; scanf("%d%d%d",&a,&b,&e); if(a) update(b,e,1,n,1); else printf("%d\n",query(b,e,1,n,1)); } } return 0; }//区间更新
相关文章推荐
- 线段树模板以及对线段树的理解
- HDU(1166),线段树模板,单点更新,区间总和
- 线段树模板
- (模板)线段树(区间双重更新,区间求和)
- (模板)线段树(单点更新,单点求值)
- 线段树模板
- 线段树 点更新 区间和 模板
- 【洛谷1592】【模板】template 线段树 线段树裸题
- 蓝桥杯 算法训练 操作格子 (线段树模板)
- 线段树区间更新求和模板
- 线段树区间更新(1)(区间同时加上x)模板(序号从0开始)O(logn)(poj3468)
- HDU 1166 敌兵布阵 (线段树点更新模板题)
- 模板 —— 线段树
- ACM模板——各种各样的线段树
- luoguP3834 【模板】可持久化线段树 1(主席树)
- hiho一下 第二十周(线段树模板)
- 线段树模板
- poj3468 A Simple Problem with Integers(线段树+区间更新+非完全替换)模板
- P3372 【模板】线段树 1
- 洛谷P3373 【模板】线段树2