I Hate It(hdu 1754)


#include<bits/stdc++.h>
using namespace std;
const int maxn=200005;
int num[maxn];
int tree[maxn*4];
void build(int p,int l,int r)
{
    if(l==r)
    {
        tree[p]=num[l];
        return;
    }
    int mid=(l+r)>>1;
    build(p<<1,l,mid);
    build(p<<1|1,mid+1,r);
    tree[p]=max(tree[p<<1],tree[p<<1|1]);
}
int Find(int p,int l,int r,int x,int y)
{
    if(x<=l&&y>=r) return tree[p];
    int mid=(l+r)>>1;
    if(y<=mid) return Find(p<<1,l,mid,x,y);
    else if(x>mid) return Find(p<<1|1,mid+1,r,x,y);
    return (max(Find(p<<1,l,mid,x,mid),Find(p<<1|1,mid+1,r,mid+1,y)));
}
void change(int p,int l,int r,int x,int num)
{
    if(l==r)
    {
        tree[p]=num;
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid) change(p<<1,l,mid,x,num);
    else change(p<<1|1,mid+1,r,x,num);
    tree[p]=max(tree[p<<1],tree[p<<1|1]);
}
int main()
{
    char s[2];
    int n,m,a,b;
    while(scanf("%d%d",&n,&m)==2)
    {
        for(int i=1;i<=n;i++) scanf("%d",&num[i]);
        build(1,1,n);
        while(m--)
        {
            scanf("%s%d%d",s,&a,&b);
            if(s[0]=='Q') printf("%d\n",Find(1,1,n,a,b));
            else change(1,1,n,a,b);
        }
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80217355
今日推荐