• HDU 1754 I Hate It(线段树)


    HDU 1754 I Hate It(线段树)

    这道题是线段树的简单版~

    话不多说,直接上代码!

    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=2e5+5;
    int sum[maxn*4];
    int a[maxn];
    void pushup(int root)  //求区间最大值
    {
        sum[root]=max(sum[root*2],sum[root*2+1]);
    }
    void build(int l,int r,int root)  //建树
    {
        if(l==r)
      {
          sum[root] = a[l];
         return;
     }
        int mid=(l+r)/2;
        build(l,mid,root*2);
        build(mid+1,r,root*2+1);
        pushup(root);
    }
    void Update(int num,int val,int l,int r,int root)  //更新值
    {
        if(l==r&&num==l)
        {
            a[num]=val;
            sum[root]=a[num]; 
            return;
        }
        int mid=(l+r)/2;
        if(num<=mid)
            Update(num,val,l,mid,root*2);
        else
            Update(num,val,mid+1,r,root*2+1);
        pushup(root);//更新值的同时也要更新区间最大值
    }
    int Query(int be,int ed,int l,int r,int root)  //查询区间最大值
    {
        if(be<=l&&r<=ed)  //返回区间子集的最大值
            return sum[root];
        int mid=(l+r)/2;
        int ans=0;
        if(be<=mid)
           ans=max(ans,Query(be,ed,l,mid,root*2));
        if(mid<ed)
           ans=max(ans,Query(be,ed,mid+1,r,root*2+1));
           return ans;
    }
    char s[10];  //切记不要定义在循环内,因为可以询问多次多个例子,多次内存会爆
    int main() {
        int n,m;
        while(scanf("%d%d",&n,&m) != EOF)
        {
            for(int i=1;i<=n;++i)
            {
                scanf("%d",&a[i]);
            }
            build(1,n,1);
            int x,y;
            while(m--)
            {
                scanf("%s",s);
                if(s[0]=='U')
                {
                    scanf("%d %d",&x,&y);
                    Update(x,y,1,n,1);
                }
                if(s[0]=='Q')
                {
                    scanf("%d %d",&x,&y);
                    printf("%d
    ",Query(x,y,1,n,1));
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    UVA247 电话圈 Calling Circles
    Python开发之路
    Day 8-模块
    Homework
    Day 7- 装饰器
    Day 6-文件操作的其他方法 迭代器 生成器
    数据-进制
    Day 5-变量与高阶函数
    Day 4-集合、百分号拼接及函数
    Day 3-Python列表、元祖、词典
  • 原文地址:https://www.cnblogs.com/acmer-hmin/p/11813114.html
Copyright © 2020-2023  润新知