zoukankan      html  css  js  c++  java
  • Segment Tree 分类: ACM TYPE 2014-08-29 13:04 97人阅读 评论(0) 收藏

    #include<iostream>
    #include<cstdio>
    using namespace std;
    struct node
    {
        int l, r, m;
        int max;
    }num[800005];
    int val[200005];
    int n, m;
    int init(int l, int r, int k)
    {
        num[k].l = l;
        num[k].r = r;
        if(l==r)
        {
            num[k].m = l;
            num[k].max=val[l];
            return val[l];
        }
        num[k].m = (l+r)>>1;
        num[k].max = max(init(l,num[k].m,k+k),init(num[k].m+1,r,k+k+1));
        return num[k].max;
    }
    
    void update(int x,int y,int k)
    {
        if(num[k].l==num[k].r)    
        {
            num[k].max = y;
            return;
        }
        if(x>num[k].m)    update(x,y,k+k+1);
        else update(x,y,k+k);
        num[k].max=max(num[k+k].max,num[k+k+1].max);
    }
    
    int ans(int l, int r, int k)
    {
        if(num[k].l==l && num[k].r==r)
        {
            return num[k].max;
        }
        else if(l>num[k].m){
            return ans(l,r,k+k+1);
        }
        else if(r<=num[k].m)
        {
            return ans(l,r,k+k);
        }
        else    return max(ans(l,num[k].m,k+k),ans(num[k].m+1,r,k+k+1));
    }
    
    int main()
    {
        char str[5];
        int a, b;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=1;i<=n;i++)    scanf("%d",&val[i]);
            init(1,n,1);
            while(m--)
            {
                scanf("%s%d%d",str,&a,&b);
                if(str[0]=='U')    update(a,b,1);
                else     printf("%d
    ",ans(a,b,1));
            }
            
        }
    }

    Code From Hdu 1754

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    mongodb导入导出
    python笔记1
    C# 文件下载断点续传
    热水维修记事
    memcached笔记
    模拟登陆
    Nginx学习笔记之加强篇
    Redis学习笔记之基础篇
    Nginx学习笔记之应用篇
    Nginx 学习笔记之安装篇
  • 原文地址:https://www.cnblogs.com/you-well-day-fine/p/4671634.html
Copyright © 2011-2022 走看看