码迷,mamicode.com
首页 > 其他好文 > 详细

hdoj 5443 The Water Problem【线段树求区间最大值】

时间:2015-09-21 22:30:23      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

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

刷道水题助助兴

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#define MAX 2100
#define INF 0x7fffff
using namespace std;
int n,m;
int Max[MAX];
void pushup(int o)
{
	Max[o]=max(Max[o<<1],Max[o<<1|1]);
}
void gettree(int o,int l,int r)
{
	if(l==r)
	{
		scanf("%d",&Max[o]);
		return ;
	}
	int mid=(l+r)>>1;
	gettree(o<<1,l,mid);
	gettree(o<<1|1,mid+1,r);
	pushup(o);
}
int find(int o,int l,int r,int L,int R)
{
	if(L<=l&&R>=r)
	{
		return Max[o];
	}
	int ans=0;
	int mid=(l+r)>>1;
	if(R<=mid)
	    ans=max(ans,find(o<<1,l,mid,L,R));
	else if(L>mid)
	    ans=max(ans,find(o<<1|1,mid+1,r,L,R));
	else 
	{
		ans=max(ans,find(o<<1,l,mid,L,R));
		ans=max(ans,find(o<<1|1,mid+1,r,L,R));
	}
	return ans;
}
int main()
{
    int t,i,j,a,b;
    scanf("%d",&t);
    while(t--)
    {
    	scanf("%d",&n);
    	gettree(1,1,n);
    	scanf("%d",&m);
    	while(m--)
    	{
    		scanf("%d%d",&a,&b);
    		printf("%d\n",find(1,1,n,a,b));
    	}
    }
	return 0;
}

  

hdoj 5443 The Water Problem【线段树求区间最大值】

标签:

原文地址:http://www.cnblogs.com/tonghao/p/4827484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!