• hdu-1754


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

    裸的线段树

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{0,-1},{-1,0}};
    #define pi acos(-1)
    #define ls rt<<1
    #define rs rt<<1|1
    #define me0(s) memset(s,0,sizeof(s))
    #define me1(s) memset(s,1,sizeof(s))
    #define mef(s) memset(s,-1,sizeof(s))
    #define meinf(s) memset(s,inf,sizeof(s))
    #define llinf 1e18
    #define inf 1e9
    const int N=2e6+6;
    int n,q;
    int Max[N*4],a[N*4];
    void pushup(int rt){
        Max[rt]=max(Max[ls],Max[rs]);
    }
    void build(int l,int r,int rt){
        if(l==r){
            Max[rt]=a[l];
            return;
        }
        int m=(l+r)>>1;
        build(l,m,ls);
        build(m+1,r,rs);
        pushup(rt);
    }
    void update(int l,int r,int p,int c,int rt){
        if(l==r){
            Max[rt]=c;
            return ;
        }
        int m=(l+r)>>1;
        if(p<=m) update(l,m,p,c,ls);
        else update(m+1,r,p,c,rs);
        pushup(rt);
    }
    int query(int L,int R,int l,int r,int rt){//L,R查询的区间,l,r总区间
        if(L<=l&&R>=r){
            return Max[rt];
        }
        int ans=0;
        int m=(l+r)/2;
        if(L<=m) ans=max(ans,query(L,R,l,m,ls));
        if(R>m) ans=max(ans,query(L,R,m+1,r,rs));
        return ans;
    }
    int main(int argc, char * argv[]){
        ios::sync_with_stdio(false);
        while(scanf("%d%d",&n,&q)!=EOF){
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            build(1,n,1);
            while(q--){
                char cc;
                getchar();
                scanf("%c",&cc);
                int l,r;
                if(cc=='Q'){
                    scanf("%d%d",&l,&r);
                    printf("%d
    ",query(l,r,1,n,1));
                }
                else{
                    int c,p;
                    scanf("%d%d",&c,&p);
                    update(1,n,c,p,1);
                }
            }        
        }
        return 0;
    }
  • 相关阅读:
    make menuconfig出现乱码
    内存中的变量和值
    is&==
    python小整数池
    生成器
    GIL
    grub rescue问题修复
    期末考试
    期末要求
    选课练习
  • 原文地址:https://www.cnblogs.com/wushengyang/p/11767651.html
Copyright © 2020-2023  润新知