hdu1754-线段树(求区间最大值)
2011-11-27 21:02
281 查看
/* //5517620 2012-03-10 20:40:02 Accepted 1754 2046MS 6376K 1829 B G++ zjwzcnjsy hdu1754-求区间最大值 */ #include <stdio.h> #include <string.h> #define MAX 200000 #define max(a,b) a>b?a:b struct TNode { int l , r; int score; }segtree[4*MAX+5]; void build(int n,int l,int r) { int mid = (l+r)/2; segtree .score = 0; segtree .l = l; segtree .r = r; if(l!=r) { build(2*n,l,mid); build(2*n+1,mid+1,r); } } void insert(int n,int k,int c) { int mid=(segtree .l+segtree .r)/2; if(segtree .l==segtree .r) { segtree .score=c; return; } if(k<=mid) { insert(2*n,k,c); } else { insert(2*n+1,k,c); } segtree .score=max(segtree[2*n].score,segtree[2*n+1].score); } int question(int n,int l,int r) { int mid=(segtree .l+segtree .r)/2; if(segtree .l==l && segtree .r==r) { return segtree .score; } if(r<=mid) { return question(2*n,l,r); } if(l>mid) { return question(2*n+1,l,r); } int i=question(2*n,l,mid); int j=question(2*n+1,mid+1,r); return i>j?i:j; } int main() { int n,m,i,t,x1,x2,c; char ch; while(scanf("%d%d",&n,&m)!=EOF) { build(1,1,n); for(i=1;i<=n;i++) { scanf("%d",&t); insert(1,i,t); } while(m--) { scanf("\n%c%d%d",&ch,&x1,&x2); if(ch=='U') { insert(1,x1,x2); } else { printf("%d\n",question(1,x1,x2)); } } } return 0; }
相关文章推荐
- 线段树基本操作(单点更新,区间更新,区间最大最小值,区间和)poj3468&poj3264&hdu1698&&hdu1166&hdu1754
- HDU1754 I Hate It(线段树单点更新,区间最大值,zkw线段树)
- hdu1754(裸线段树) 改点问区间最大值
- hdu1754 I Hate It (线段树,求区间内的最大值)
- 线段树维护区间最大值hdu1754
- Spoj 1557 Can you answer these queries II 线段树 随意区间最大子段和 不反复数字
- hdu1754 I hate it线段树模板 区间最值查询
- 线段树区间更新,区间求和,最大值,最小值模板
- 求区间连续不超过K段的最大和--线段树+大量代码
- hdu-1754 I Hate It【线段树求区间最大值】
- POJ 3264 Balanced Lineup(线段树—求区间最大值与最小值差)
- hdu 1754 线段树区间最大值 单点更新
- hdu 1754 I Hate It (线段树--求区间最大值)(基础)
- HDU 3237 Tree(树链剖分)(线段树区间取反,最大值)
- hdu 1754 I Hate It(线段树单点更新求区间最大值)
- UVALive3938 "Ray, Pass me the dishes!" 线段树动态区间最大和
- SPOJ GSS1 Can you answer these queries I (线段树求区间最大连续和)
- HDU 1754 I Hate It(线段树:单点更新,求区间最大值)
- hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】
- nyoj 1185 线段树区间最大最小值