zoukankan      html  css  js  c++  java
  • hdu 5443 The Water Problem 线段树

    The Water Problem

    Time Limit: 1 Sec  

    Memory Limit: 256 MB

    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=5443

    Description

    In Land waterless, water is a very limited resource. People always fight for the biggest source of water. Given a sequence of water sources with a1,a2,a3,...,an representing the size of the water source. Given a set of queries each containing 2 integers l and r, please find out the biggest water source between al and ar.

    Input

    First you are given an integer T(T≤10) indicating the number of test cases. For each test case, there is a number n(0≤n≤1000) on a line representing the number of water sources. n integers follow, respectively a1,a2,a3,...,an, and each integer is in {1,...,106}. On the next line, there is a number q(0≤q≤1000) representing the number of queries. After that, there will be q lines with two integers l and r(1≤l≤r≤n) indicating the range of which you should find out the biggest water source.

    Output

    For each query, output an integer representing the size of the biggest water source.

    Sample Input

    3
    1
    100
    1
    1 1
    5
    1 2 3 4 5
    5
    1 2
    1 3
    2 4
    3 4
    3 5
    3
    1 999999 1
    4
    1 1
    1 2
    2 3
    3 3

    Sample Output

    100
    2
    3
    4
    4
    5
    1
    999999
    999999
    1

    HINT

    题意

    查询区间最大值,不带修改

    题解:

    随便怎么写,反正数据范围只有1000

    代码:

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    #include <stack>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define test freopen("test.txt","r",stdin)
    #define maxn 10505
    #define mod 10007
    #define eps 1e-9
    const int inf=0x3f3f3f3f;
    const ll infll = 0x3f3f3f3f3f3f3f3fLL;
    inline ll read()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //**************************************************************************************
    
    struct node
    {
        int l,r;
        int ma;
    };
    node a[maxn*4];
    int num[maxn];
    void build(int x,int l,int r)
    {
        a[x].l=l,a[x].r=r;
        if(l==r)
        {
            a[x].ma=num[l];
            return;
        }
        int mid=(l+r)>>1;
        build(x<<1,l,mid);
        build(x<<1|1,mid+1,r);
        a[x].ma=max(a[x<<1].ma,a[x<<1|1].ma);
    }
    int query(int x,int l,int r)
    {
        int L=a[x].l,R=a[x].r;
        if(l<=L&&R<=r)
            return a[x].ma;
        int mid=(a[x].l+a[x].r)>>1;
        if(r<=mid)
            return query(x<<1,l,r);
        if(l>mid)
            return query(x<<1|1,l,r);
        return max(query(x<<1,l,mid),query(x<<1|1,mid+1,r));
    }
    int main()
    {
        int t=read();
        while(t--)
        {
            memset(a,0,sizeof(a));
            int n=read();
            for(int i=1;i<=n;i++)
                num[i]=read();
            build(1,1,n);
            int q=read();
            for(int i=0;i<q;i++)
            {
                int l=read(),r=read();
                printf("%d
    ",query(1,l,r));
            }
        }
    }
  • 相关阅读:
    SQL Server 2012 联机丛书安装
    SQL Server 2012 联机丛书离线安装
    无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用。
    System.Data.SqlClient.SqlError:无法对过程'XXX' 执行 删除,因为它正用于复制。消息 3724,级别 16
    在与SQL Server建立连接时出现于网络相关的或特定于实例的错误
    SQL Server如何删除多余tempDB文件
    无法用sysadmin权限的登录名登陆,sa密码忘了,管理员被锁在外面
    Linux----------nginx基础
    Linux----------varnish缓存加速
    Linux----------nginx日志分析
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4805295.html
Copyright © 2011-2022 走看看