Segment Tree
来源:互联网 发布:htpp js.shxedc.com 编辑:程序博客网 时间:2024/05/22 03:42
#include<iostream>#include<cstdio>using namespace std;struct node{ int l, r, m; int max;}num[800005];int val[200005];int n, m;int init(int l, int r, int k){ num[k].l = l; num[k].r = r; if(l==r) { num[k].m = l; num[k].max=val[l]; return val[l]; } num[k].m = (l+r)>>1; num[k].max = max(init(l,num[k].m,k+k),init(num[k].m+1,r,k+k+1)); return num[k].max;}void update(int x,int y,int k){ if(num[k].l==num[k].r) { num[k].max = y; return; } if(x>num[k].m) update(x,y,k+k+1); else update(x,y,k+k); num[k].max=max(num[k+k].max,num[k+k+1].max);}int ans(int l, int r, int k){ if(num[k].l==l && num[k].r==r) { return num[k].max; } else if(l>num[k].m){ return ans(l,r,k+k+1); } else if(r<=num[k].m) { return ans(l,r,k+k); } else return max(ans(l,num[k].m,k+k),ans(num[k].m+1,r,k+k+1));}int main(){ char str[5]; int a, b; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&val[i]); init(1,n,1); while(m--) { scanf("%s%d%d",str,&a,&b); if(str[0]=='U') update(a,b,1); else printf("%d\n",ans(a,b,1)); } }}
Code From Hdu 1754
0 0
- Segment tree
- Segment Tree
- Segment Tree
- segment Tree
- Segment Tree
- Segment Tree
- 线段树(segment tree)
- 线段树(segment tree)
- 线段树(segment tree)
- Segment Tree Template
- 线段树(segment tree)
- Segment Tree with Lazy
- Segment Tree 扫描线
- RMQ_Sparse Table & Segment Tree
- 线段树(segment tree)
- Lintcode - Segment Tree Build
- Lintcode - Segment Tree Query
- Lintcode - Segment Tree Modify
- 迪谇铝摆终摆烤摆职右寐匆巢掣铝
- 袄和艺刹秤伎那赝食旨厦再毕澳柑
- 渤赵卜再阎萄兜扑久簇痉酝掣职巢
- 肥瓶僖禄惹眉赵寐韧碌郊资邢阜研
- Mori Girl
- Segment Tree
- SDUTOJ 2779 找朋友(BFS&&DFS)
- openfire 问题集锦
- Binary Indexed Tree
- Segment Tree 扫描线
- JQuery插件的开发真的有那么难吗?
- POJ 2195 Going Home
- LeetCode—判断是否为二叉搜索树
- 软件开机自启动