HDU 1754 线段树

来源:互联网 发布:常用服务器端口有哪些 编辑:程序博客网 时间:2024/05/17 13:08
#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<cctype>#include<iomanip>#define Lson  left , t   , rt<<1#define Rson  t+1  ,right,rt<<1|1using namespace std;const int maxn=200005;int f[maxn<<2];void PushUP( int rt ){    f[rt] = max( f[rt<<1], f[rt<<1|1] );}void build( int left, int right ,int rt ){    if( left==right ){        cin>>f[rt];        return;    }    int t=(left + right)>>1;    build(Lson);    build(Rson);    PushUP(rt);}void update(int ii,int value,int left, int right, int rt ){    if( left == right ){        f[rt] = value; return;    }    int t=(left+right)>>1;    if(ii<=t) update(ii, value, Lson);    else      update(ii, value, Rson);    PushUP(rt);}int query(int l, int r, int left, int right, int rt ){    if( l<=left && r>=right )        return f[rt];    int t=(left+right)/2;    int ret = 0;    if(l <= t)ret = max(ret, query( l, r, Lson) );    if(r > t) ret = max(ret, query( l, r, Rson) );    return ret;}int main(){    int n,m;    while(cin>>n>>m){        build(1,n,1);        while(m--){            char C; int a,b;//for(int i=0;i<=n;++i)cout<<f[i]<<' ';cout<<endl;            cin>>C>>a>>b;            if(C=='Q') cout<<query(a,b,1,n,1)<<endl;            else update(a,b,1,n,1);        }    }    return 0;}

原创粉丝点击