hdu 1754 I Hate It 线段树Test

来源:互联网 发布:数据库的事务 编辑:程序博客网 时间:2024/06/05 18:48

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1754

#include <iostream>#include <cstdio>using namespace std;#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1const int MAXN = 200010;int MaxNum[MAXN<<2];int MAX(int a, int b){    return a > b ? a : b;}void Push_Up(int rt){    MaxNum[rt] = MAX(MaxNum[rt<<1], MaxNum[rt<<1|1]);}void Build_Tree(int l, int r, int rt){    if(l == r)    {        scanf("%d", &MaxNum[rt]);        return ;    }    int m = (l+r)>>1;    Build_Tree(lson);    Build_Tree(rson);    Push_Up(rt);}void UFSet(int pos, int data, int l, int r, int rt){    if(l == r)    {        MaxNum[rt] = data;        return ;    }    int m = (l+r)>>1;    if(pos <= m)        UFSet(pos, data, lson);    else        UFSet(pos, data, rson);    Push_Up(rt);}int Query_Tree(int L, int R, int l, int r, int rt){    if(L <= l && R >= r)        return MaxNum[rt];    int m = (l+r) >> 1;    int res = 0;    if(L <= m)        res = MAX(res, Query_Tree(L, R, lson));    if(R > m)        res = MAX(res, Query_Tree(L, R, rson));    return res;}int main(){    int n, oper;    char c[2];    int a, b;    while(~scanf("%d %d", &n, &oper))    {        Build_Tree(1, n, 1);        while(oper--)        {            scanf("%s%d %d", c, &a, &b);            if(c[0] == 'Q')                printf("%d\n", Query_Tree(a, b, 1, n, 1));            else                UFSet(a, b, 1, n, 1);        }    }    return 0;}