记录编号 329384 评测结果 AAAAAAAAAA
题目名称 延绵的山峰 最终得分 100
用户昵称 GravatarMagic_Sheep 是否通过 通过
代码语言 C++ 运行时间 1.081 s
提交时间 2016-10-25 11:22:06 内存使用 14.01 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int tree[4000040];
int build(int num,int l,int r)
{
	if(l==r)
	{
		scanf("%d",&tree[num]);
		return tree[num];
	}
	int mid=(l+r)/2;
	int tl=build(num*2,l,mid);
	int tr=build(num*2+1,mid+1,r);
	return tree[num]=max(tl,tr);
}
int find(int num,int l,int r,int tl,int tr)
{
	if(tl<=l&&tr>=r) return tree[num];
	int mid=(l+r)/2;
	if(tr<=mid) return find(num*2,l,mid,tl,tr);
	else if(tl>mid) return find(num*2+1,mid+1,r,tl,tr);
	else
	{
		int t1=find(num*2,l,mid,tl,tr);
		int t2=find(num*2+1,mid+1,r,tl,tr);
		return max(t1,t2);
	}
}
int main()
{
	freopen("climb.in","r",stdin);
	freopen("climb.out","w",stdout);
	memset(tree,-1,sizeof(tree));
	int n;
	scanf("%d",&n);
	build(1,0,n);
	int m;
	scanf("%d",&m);
	for(int i=0;i<m;i++)
	{
		int tl,tr;
		scanf("%d%d",&tl,&tr);
		int ans=find(1,0,n,tl,tr);
		cout<<ans<<endl;
	}
	return 0;
}