zoukankan      html  css  js  c++  java
  • hdu_1754,线段树单点更新,求区间最值

    http://www.notonlysuccess.com/index.php/segment-tree-complete/
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define maxn 2222222
    using namespace std;
    int a[maxn<<2];
    void pushUp(int rt)
    {
        a[rt]=max(a[rt<<1],a[rt<<1|1]);
    }
    void build(int l,int r,int rt)
    {
        if(l==r)
        {
            scanf("%d",&a[rt]);
            return ;
        }
        int m=(r+l)>>1;
        build(lson);
        build(rson);
        pushUp(rt);
    }
    void update(int p,int sc,int l,int r,int rt)
    {
        if(l==r)
        {
            a[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)
    {
        int x=0;
        if(L<=l&&r<=R)
            return a[rt];
        int m=(r+l)>>1;
        if(L<=m) x=max(x,query(L,R,lson));
        if(R>m) x=max(x,query(L,R,rson));
        return x;
    }
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            build(1,n,1);
            char c[2];
            int d,e;
            for(int i=0; i<m; i++)
            {
                scanf("%s%d%d",c,&d,&e);
                if(c[0]=='Q')
                {
                    printf("%d
    ",query(d,e,1,n,1));
                }
                if(c[0]=='U')
                {
                    update(d,e,1,n,1);
                }
            }
        }
        return 0;
    }

  • 相关阅读:
    线性地址物理地址逻辑地址转换mmu
    C/c++ 宏返回值
    树的子结构
    合并两个排序的链表
    链表中倒数第k个结点
    数值的整数次方
    原码、反码与补码
    二进制中1的个数
    矩形覆盖
    变态跳台阶
  • 原文地址:https://www.cnblogs.com/vactor/p/4099985.html
Copyright © 2011-2022 走看看