zoukankan      html  css  js  c++  java
  • hdu_1754I Hate It(线段树)

    hdu_1754I Hate It(线段树)

    标签: 线段树


    题目链接

    题意:

    中文题意。。。不多说了,线段树基础题
    

    直接上代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N = 200005;
    int init[N];
    int Max[N<<4];
    /*
    void Update(int i, int c, int l, int r, int rt)
    {
        if(r==l&&l==i) {
            Max[rt] = c;
            return;
        }
        int m = (l+r)>>1;
        if(i<=m) Update(i,c,l,m,rt<<1);
        if(i>m)  Update(i,c,m+1,r,rt<<1|1);
        Max[rt] = max(Max[rt<<1],Max[rt<<1|1]);
    }
        */
    
    void Update(int L, int R, int c, int i, int l, int r, int rt)
    {
        if(i<=l||i>=r) return;
        if(r==l&&l==i) Max[rt] = c;
        if(L<=l&&R>=r) Max[rt] = max(Max[rt],c);
        int m = (l+r)>>1;
        if(l<=m) Update(L,R,c,i,l,m,rt<<1);
        if(r>m) Update(L,R,c,i,m+1,r,rt<<1|1);
    }
    int tm1,tm2;
    int query(int L, int R, int l, int r, int rt){
       if(L <= l && R >= r){
            return Max[rt];
       }
       int m = (l+r)>>1;
       tm1 = tm2 = 0;
       if(L<=m) tm1 = query(L,R,l,m,rt<<1);
       if(R>m) tm2 = query(L,R,m+1,r,rt<<1|1);
       return max(tm1,tm2);
       /* if(L==l&&R==r) return Max[rt];
        int m = (l+r)>>1;
        if(R<=m) query(L,R,l,m,rt<<1);
        else if(L>m) query(L,R,m+1,r,rt<<1|1);
        return max(query(L,m,l,m,rt<<1),query(m+1,R,m+1,r,rt<<1|1));
        */
    }
    int main()
    {
        int n,m;
        char ch;
        while(~scanf("%d%d",&n,&m))
        {
            memset(Max,0,sizeof(Max));
            memset(init,0,sizeof(init));
            for(int i = 1; i <= n; i++){
                scanf("%d",&init[i]);
                Update(1,n,init[i],i,1,n,1);
            }
            for(int i = 1; i <= m; i++){
                getchar();
                scanf("%c",&ch);
                //printf("%c",ch);
                int l,r;
                scanf("%d%d",&l,&r);
                if(ch=='Q'){
                    int ans = query(l,r,1,n,1);
                    printf("%d
    ",ans);
                }
                else if(ch=='U'){
                    Update(l,r,1,n,1);
                }
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    c# 反射取其他项目的资源文件
    【分享】免费建立自己的站点
    c# 自定义类型的DataBindings
    ListView 多行拖拽排序
    linq to sql之组装where条件下的'或'语句
    dotfuscator使用方法
    orderBy 传入属性的字符串
    WCF数据交互时长度超过8192
    ASP.net中aspx与cs函数的互调
    c# 读取excel数据的两种方法
  • 原文地址:https://www.cnblogs.com/shanyr/p/5709730.html
Copyright © 2011-2022 走看看