zoukankan      html  css  js  c++  java
  • hdu 1754 I Hate It (线段树 单点更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1754

    照着hdu 1166 的模板稍加改动即可

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int sum[1000000];
    void push(int rt)
    {
        sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
    }
    void build(int l,int r,int rt)
    {
        if(l==r){scanf("%d",&sum[rt]);return ;}
        int m=(l+r)>>1;
        build(l,m,rt<<1);build(m+1,r,rt<<1|1);
        push(rt);
    }
    void update(int key,int neww,int l,int r,int rt)
    {
        if(l==r){ sum[rt]=neww; return ;}
        int m=(l+r)>>1;
        if(key<=m) update(key,neww,l,m,rt<<1);
        else update(key,neww,m+1,r,rt<<1|1);
        push(rt);
    }
    int query(int L,int R,int l,int r,int rt)
    {
        if(L<=l&&r<=R) {return sum[rt];}
        int m=(l+r)>>1;
        int ret1=-1,ret2=-1;
        if(L<=m) ret1=query(L,R,l,m,rt<<1);
        if(R>m)  ret2=query(L,R,m+1,r,rt<<1|1);
        return max(ret1,ret2);
    }
    int main()
    {
        int n,m;
        int i,j,k;
        int l,r;
        char que[10];
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            build(1,n,1);
            while(m--)
            {
                scanf("%s%d%d",&que,&l,&r);
                if(que[0]=='U')
                {
                    update(l,r,1,n,1);
                }
                else
                {
                    printf("%d
    ",query(l,r,1,n,1));
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    洛谷P2805 植物大战僵尸
    洛谷P4307 球队收益
    bzoj4842 Delight for a Cat
    洛谷P2053 修车
    bzoj2561 最小生成树
    bzoj3114 LCM Pair Sum
    洛谷P4486 Kakuro
    bzoj3698 XWW的难题
    关于oracle数据库
    toString方法的用法
  • 原文地址:https://www.cnblogs.com/sola1994/p/4268204.html
Copyright © 2011-2022 走看看