zoukankan      html  css  js  c++  java
  • HDU 1754 I Hate It

    线段树裸题。

    单点修改+区间查询。

    const int N=2e5+10;
    struct Node
    {
        int l,r;
        int maxv;
    }tr[N<<2];
    int score[N];
    int n,m;
    
    void pushup(int u)
    {
        tr[u].maxv=max(tr[lc].maxv,tr[rc].maxv);
    }
    
    void build(int u,int l,int r)
    {
        tr[u]={l,r};
        if(l == r)
        {
            tr[u].maxv=score[l];
            return;
        }
    
        int mid=l+r>>1;
        build(lc,l,mid);
        build(rc,mid+1,r);
        pushup(u);
    }
    
    void modify(int u,int x,int v)
    {
        if(tr[u].l == tr[u].r)  // 找到叶节点
        {
            tr[u].maxv=v;
            return;
        }
        int mid=tr[u].l+tr[u].r>>1;
        if(x <= mid) modify(lc,x,v);
        if(x > mid) modify(rc,x,v);
        pushup(u);
    }
    
    int query(int u,int l,int r)
    {
        if(l <= tr[u].l && tr[u].r <= r)
            return tr[u].maxv;
    
        int mid=tr[u].l+tr[u].r>>1;
        int res=0;
        if(l <= mid) res=max(res,query(lc,l,r));
        if(r > mid) res=max(res,query(rc,l,r));
        return res;
    }
    
    int main()
    {
        while(cin>>n>>m)
        {
            for(int i=1;i<=n;i++) scanf("%d",&score[i]);
    
            build(1,1,n);
    
            while(m--)
            {
                char op[2];
                int x,y;
                scanf("%s%d%d",op,&x,&y);
                if(*op == 'Q')
                    cout<<query(1,x,y)<<endl;
                else
                    modify(1,x,y);
            }
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    Docker安装nexus
    docker常用操作备忘
    react-01
    SBT实操指南
    Play中JSON序列化
    SPARK安装一:Windows下VirtualBox安装CentOS
    SPARK安装三:SPARK集群部署
    SPARK安装二:HADOOP集群部署
    SLICK基础
    函数式编程
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14671239.html
Copyright © 2011-2022 走看看