HDU 1754I Hate It(线段树)

来源:互联网 发布:金域名苑 编辑:程序博客网 时间:2024/06/05 05:40

中文题目就不多说意思了  大概是让你求一个区间的最值问题  无情套一发模板



#include <iostream>#include<cstdio>#include<algorithm>#include<cstring>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;const int maxn = 200005;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 L,int c,int l,int r,int rt){    if(l == r){        Max[rt] = c;        return ;    }    int m = (l + r) >> 1;    if(L <= m) Update(L , c, lson);    else Update(L , c, 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 = -1;    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,a,b;    char op[5];    while(~scanf("%d%d",&N,&M)){        build(1 , N, 1);        for (int i = 0; i < M; i ++) {            scanf("%s",op);            if(op[0] == 'U'){               scanf("%d%d",&a,&b);               Update(a , b, 1, N, 1);            }            else {                scanf("%d%d",&a,&b);                printf("%d\n",query(a , b, 1, N, 1));            }        }    }    return 0;}


0 0
原创粉丝点击