zoukankan      html  css  js  c++  java
  • HDU 1754 I Hate It(线段树)

    点我看题目

    题意  :又是一道中问题,我就不说题意了。。。。

    思路 : 线段树,这道题跟1166差不多,改一些地方就差不多了。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    using namespace std;
    
    const int maxn = 500005 ;
    int a[maxn] ;
    int ans ;
    struct node
    {
        int l,r,value ;
    } Node[4*maxn] ;
    
    void build(int v ,int l,int r)
    {
        Node[v].l = l ;
        Node[v].r = r ;
        Node[v].value = 0;
        if(l == r)
        {
            return ;
        }
        int mid = (l+r)>>1 ;
        build(v*2,l,mid) ;
        build(v*2+1,mid+1,r) ;
    }
    
    int query(int v,int l,int r)
    {
        if(Node[v].l == l && Node[v].r == r)
            return Node[v].value ;
        int mid = (Node[v].l+Node[v].r) >> 1 ;
        if(r <= mid)
            return query(v*2,l,r) ;
        else
        {
            if(l > mid)
                return query(v*2+1,l,r) ;
            else
                return max(query(v*2,l,mid),query(v*2+1,mid+1,r) );
        }
    }
    
    void update(int v,int n,int m)
    {
    
        if(Node[v].value < m)
            Node[v].value = m ;
        if(Node[v].l == n &&  Node[v].r == n)
        {
            Node[v].value = m ;
            return  ;
        }
        else
        {
            int mid = (Node[v].l+Node[v].r)>>1 ;
            if(n <= mid)
                update(2*v,n,m) ;
            else if(n > mid)
                update(2*v+1,n,m) ;
        }
    }
    
    
    
    int main()
    {
        int n,m ;
        while(~scanf("%d %d",&n,&m))
        {
            build(1,1,n) ;
            ans = 0;
            for(int i = 1 ; i <= n ; i++)
            {
                scanf("%d",&a[i]) ;
                update(1,i,a[i]) ;
            }
    
            char ch[31] ;
            for(int i = 1 ; i <= m ; i++)
            {
                getchar() ;
                scanf("%s",ch) ;
                int a,b ;
                if(ch[0] == 'Q')
                {
                    scanf("%d %d",&a,&b) ;
                    printf("%d
    ",query(1,a,b)) ;
                }
                else if(ch[0] == 'U')
                {
                    scanf("%d %d",&a,&b) ;
                    update(1,a,b) ;
                }
    
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    zju 2886
    zju 2478
    UVA350-水题
    UVA699-落叶-二叉树
    UVA327
    UVA548
    java环境变量
    synchronized关键字
    uva297
    UVA196
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3558282.html
Copyright © 2011-2022 走看看