HDU 1754 I Hate It
2012-08-09 21:15
232 查看
线段树。
代码如下:
代码如下:
#include<iostream> #include<cstdio> #define max 2000002 using namespace std; typedef struct { int l, r; int val; }node; node t[4*max]; void build(int l, int r, int rt) { t[rt].l=l; t[rt].r=r; if (l == r) { scanf("%d", &t[rt].val); return ; } int m=(l+r)>>1; build(l, m, rt<<1); build(m+1, r, rt<<1|1); t[rt].val= t[rt<<1].val > t[rt<<1|1].val ? t[rt<<1].val : t[rt<<1|1].val; } void update(int p, int v, int rt) { if (t[rt].r == t[rt].l) { t[rt].val=v; return ; } int m=(t[rt].r+t[rt].l)>>1; if (p <= m) update(p, v, rt<<1); else update(p, v, rt<<1|1); t[rt].val= t[rt<<1].val > t[rt<<1|1].val ? t[rt<<1].val : t[rt<<1|1].val; } int maxv(int L, int R, int rt) { if (L == t[rt].l && R == t[rt].r) return t[rt].val; int m=(t[rt].r+t[rt].l)>>1; if (L > m) return maxv(L, R, rt<<1|1); else if (R <= m) return maxv(L, R, rt<<1); else { int t1=maxv(L, m, rt<<1); int t2=maxv(m+1, R, rt<<1|1); if (t1 > t2) return t1; else return t2; } } int main() { int a, b; int n, m; char op[2]; while(scanf("%d%d%*c", &n, &m) != EOF) { build(1, n, 1); while(m--) { scanf("%s%d%d%*c", op, &a, &b); if (op[0] == 'U') update(a, b, 1); else if (op[0] == 'Q') printf("%d\n", maxv(a, b, 1)); } } return 0; }
相关文章推荐
- HDU 1754_I Hate It
- HDU1754 I Hate It,线段树
- HDU 1754 I Hate It【线段树】
- hdu 1754 I Hate It (线段树--求区间最大值)(基础)
- ACM 数据结构 线段数 HDU 1754 I Hate It
- HDU 1754 I Hate It 线段树 && Splay && zkw线段树
- HDU-1754--I Hate It---线段树
- HDU 1754 I Hate It(线段树入门题)
- Hdu-1754 I hate it【线段树(单点更新)】
- HDU 1754——I Hate It——————【线段树单点替换、区间求最大值】
- 【HDU 1754】I Hate It —— 线段树(数组和指针实现)
- HDU 1754 I Hate It 线段树RMQ
- HDU 1754 - I Hate It - Segment Tree
- hdu1754 I Hate It,线段树
- HDU 1754 I Hate It (单点修改,区间查询
- HDU-1754:I Hate It(splay结构体做法)
- HDU-1754 I Hate It(线段树求区间最值)
- HDU 1754 I hate it 分段树Segment Tree题解
- HDU 1754 I Hate It【线段树 单点更新】
- HDU - 1754 I Hate It(max型线段树)