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

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754

    线段树的模板题,详细的都写在代码里了

    //不知道为什么定义单个字符,用%c输入会超时,换成字符数组和%s就过了

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <stack>
    #include <queue>
    #include <cmath>
    #define ll long long
    #define pi 3.1415927
    using namespace std;
    int tree[400005],num[200005];
    void build(int i ,int j, int k)
    {
        //建树,将1-n 2分分配给子节点,最后在给最终的节点赋值
        if(j==k)
        {
            tree[i]=num[j];
            return ;
        }
        int mid =(j+k)>>1;
        build(i<<1,j,mid);
        build(i<<1|1,mid+1,k);
        tree[i]=max(tree[i<<1],tree[i<<1|1]);
    }
    void add(int i,int x, int j ,int k,int p)
    {
        //维护  从头寻找要改变的节点,找到后再依次返回父节点进行维护
        if (j==k)
        {
            tree[i]=p;
            return ;
        }
        int mid =(j+k)>>1;
        if(x<=mid)
            add(i<<1,x,j,mid,p);
        else
            add(i<<1|1,x,mid+1,k,p);
        tree[i]=max(tree[i<<1],tree[i<<1|1]);
    }
    int finds(int i,int x, int y, int j, int k)
    {
        //查询  寻找符合要求的节点
        if(x<=j && y>=k)
            return tree[i];
        int mid=(j+k)>>1;
        if(y<=mid)
            return finds(i<<1,x,y,j,mid);
        else if(x>mid)
            return finds(i<<1|1,x,y,mid+1,k);
        else
            return max(finds(i<<1,x,y,j,mid),finds(i<<1|1,x,y,mid+1,k));
    }
    int main ()
    {
        int n,m,i,t,j,k,x,y;
        char str[3]; //这里不用字符数组不知道为什么莫名其妙的超时
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            for(i=1;i<=n;++i)
                scanf("%d",&num[i]);
            build(1,1,n);
            while(m--)
            {
                scanf("%s %d %d",str,&x,&y);
                if(str[0]=='Q'){
                        t=finds(1,x,y,1,n);
                    printf("%d
    ",t);
                }
                else if (str[0]=='U')
                    add(1,x,1,n,y);
            }
        }
        return 0;
    }
  • 相关阅读:
    context:componentscan 分析
    分布式计算
    分布式数据库
    Windows界面编程第四篇 异形窗体 高富帅版
    图解如何在VC6,VS2008中设置程序条件断点
    makefile的语法以及写法
    KMP字符串模式匹配算法
    VC中操作excel表格
    Windows界面编程第二篇 半透明窗体
    Windows界面编程第一篇 位图背景与位图画刷
  • 原文地址:https://www.cnblogs.com/blowhail/p/11250668.html
Copyright © 2011-2022 走看看