记录编号 396834 评测结果 AAAAAAAAAA
题目名称 延绵的山峰 最终得分 100
用户昵称 GravatarFisher. 是否通过 通过
代码语言 C++ 运行时间 0.395 s
提交时间 2017-04-19 10:52:31 内存使用 19.39 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
struct t
{
	int maxx;
};
t node[4000040];
int n,nl,nr,t;
int data[1000010];
void build(int o,int l,int r)
{
	int m=(l+r)/2;
	if(l==r)
	{
		node[o].maxx=data[l];
		return;
	}
	build(o*2,l,m);
	build(o*2+1,m+1,r);
	node[o].maxx=max(node[o*2].maxx,node[o*2+1].maxx);
}
int findmax(int o,int l,int r)
{
	int m=(l+r)/2;
	if(l>=nl&&r<=nr)
	{
		return node[o].maxx;
	}
	int ans=-0x7fffffff;
	if(m>=nl)
	ans=max(ans,findmax(o*2,l,m));
	if(m<nr)
	ans=max(ans,findmax(o*2+1,m+1,r));
	return ans;
}
int main()
{
	freopen("climb.in","r",stdin);
	freopen("climb.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n;
	n--;
	int guo1,guo2;
	for(int i=1;i<=n;i++)
	{
		if(i==1)cin>>guo1;
		cin>>data[i];
		if(i==n)cin>>guo2;
	}
	build(1,1,n);
	cin>>t;
	while(t--)
	{
		cin>>nl>>nr;
		if(nl==0)nl++;
		if(nr==n+1)nr--;
		cout<<findmax(1,1,n)<<endl;
	}
	return 0;
}