hdu1754

来源:互联网 发布:亚投行 日本 知乎 编辑:程序博客网 时间:2024/06/06 06:30
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;//hdu1754 线段树//单点替换 区间最值#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int maxn = 200010;int MAX[maxn << 2];void pushup(int rt){    MAX[rt] = max( MAX[rt << 1], MAX[rt << 1 | 1]);}void build(int l, int r, int rt){    if(l == r)    {        scanf("%d",&MAX[rt]);        return;    }    int m = (l + r) >> 1;    build(lson);    build(rson);    pushup(rt);}void update(int p, int sc, int l, int r, int rt){    if(l == r)    {        MAX[rt] = sc;        return ;    }    int m = (l + r) >> 1;    if(p <= m) update(p, sc, lson);    else update(p, sc, rson);    pushup(rt);}int query(int L, int R, int l, int r, int rt){    if(L <= l && r <= R)    {        return MAX[rt];    }    int m = (l + r) >> 1;    int ret = 0;    if(L <= m) ret = max(ret, query(L, R, lson));    if(R > m) ret = max(ret, query(L, R, rson));    return ret;}int main(){    int n, m;    while( ~scanf("%d%d", &n, &m) )    {        build(1, n, 1);        while(m--)        {            char op[2];            int a, b;            scanf("%s%d%d", op, &a, &b);            if(op[0] == 'Q') printf("%d\n", query(a, b, 1, n, 1));            else update(a, b, 1, n, 1);        }    }    return 0;}

0 0
原创粉丝点击