首页 > 其他分享 >HDU 5443

HDU 5443

时间:2023-08-15 17:34:16浏览次数:42  
标签:HDU 5443 tree number int num include root


The Water Problem


Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 606    Accepted Submission(s): 489



Problem Description


a1,a2,a3,...,anrepresenting 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


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)


 



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


 



//这题其实可以打表没必要用线段树


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
#include <map>
#include <queue>
using namespace std;
const int maxn=1000+10;
const int inf=0xffffff0;
int Max=-inf;
struct Node
{
    int l,r;
    int num;
    int mid()
    {
        return (l+r)/2;
    }
};
Node tree[800010];
void Buildtree(int root,int l,int r)
{
    tree[root].l=l;
    tree[root].r=r;
    tree[root].num=-inf;

    if(l!=r)
    {
        Buildtree(root*2+1,l,(l+r)/2);
        Buildtree(root*2+2,(l+r)/2+1,r);
    }
}
void Add(int root,int i,int val)
{
    if(tree[root].l==tree[root].r)
    {
        tree[root].num=val;
        return;
    }
    tree[root].num = max(tree[root].num,val);
    if(i<=tree[root].mid())
    {
        Add(2*root+1,i,val);
    }
    else
    {
        Add(2*root+2,i,val);
    }
}
void query(int root,int l,int r)
{
    if(tree[root].num<=Max )
        return;
    if(tree[root].l==l&&tree[root].r==r)
    {
        Max=max(Max,tree[root].num);
        return;
    }
    if(r<=tree[root].mid())
        query(2*root+1,l,r);
    else if(l>tree[root].mid())
        query(2*root+2,l,r);
    else
    {
        query(2*root+1,l,tree[root].mid());
        query(2*root+2,tree[root].mid()+1,r);
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,a;
        scanf("%d",&n);
        Buildtree(0,1,n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a);
            Add(0,i,a);
        }
        int p;
        scanf("%d",&p);
        for(int i=0;i<p;i++)
        {
            int l,r;
            scanf("%d%d",&l,&r);
            Max=-inf;
            query(0,l,r);
            printf("%d\n",Max);
        }
    }
    return 0;
}




标签:HDU,5443,tree,number,int,num,include,root
From: https://blog.51cto.com/u_3936220/7091412

相关文章

  • HDU 5313
    TheshortestproblemTimeLimit:3000/1500MS(Java/Others)  MemoryLimit:65536/65536K (Java/Others)TotalSubmission(s):1484  AcceptedSubmission(s):686ProblemDescriptionInthisproblem,weshouldsolveaninterestinggame.Atfirst,we hav......
  • HDU 1423
    GreatestCommonIncreasingSubsequenceTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):5384  AcceptedSubmission(s):1742ProblemDescriptionThisisaproblemfromZOJ2432.Tomakeiteasyer,you......
  • HDU 1025
    ConstructingRoadsInJGShining'sKingdomTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):19340  AcceptedSubmission(s):5473ProblemDescriptionJGShining'skingdomconsistsof2n(nis......
  • HDU 1950
    BridgingsignalsTimeLimit:5000/1000MS(Java/Others)  MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1169  AcceptedSubmission(s):767ProblemDescription'Ohno,they'vedoneitagain',criesthechiefdesigneratth......
  • HDU 1087 (LIS)
    SuperJumping!Jumping!Jumping!TimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):28091  AcceptedSubmission(s):12529ProblemDescriptionNowadays,akindofchessgamecalled“SuperJumping!Jump......
  • HDU 3478
    CatchTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):1389  AcceptedSubmission(s):682ProblemDescriptionAthiefisrunningaway!Wecanconsiderthecitywherehelocatesasanundirectedgrap......
  • HDU 5364
    DistributionmoneyTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):310  AcceptedSubmission(s):186ProblemDescriptionAFAwanttodistributionhermoneytosomebody.Shedividehermoneyintons......
  • HDU 5366
    ThemookjongTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):326  AcceptedSubmission(s):252ProblemDescription![](../../data/images/C613-1001-1.jpg)ZJiaQwanttobecomeastrongman,sohed......
  • HDU 2444
    TheAccomodationofStudentsTimeLimit:5000/1000MS(Java/Others)  MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):3561  AcceptedSubmission(s):1656ProblemDescriptionThereareagroupofstudents.Someofthemmayknoweachother,......
  • HDU 1698(线段树 区间更新)
    JustaHookTimeLimit:4000/2000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):23481    AcceptedSubmission(s):11758ProblemDescriptionInthegameofDotA,Pudge’smeathookisactuallythemosthorr......