比赛 线段数树状数组 评测结果 AAAAAAAAAA
题目名称 延绵的山峰 最终得分 100
用户昵称 李宴彬 运行时间 0.666 s
代码语言 C++ 内存使用 118.57 MiB
提交时间 2018-06-08 14:07:46
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
struct node 
{
	int l,r,mx;
}tree[10000010];
int a[1000010];
void wh(int now)
{
	tree[now].mx=max(tree[now<<1].mx,tree[now<<1|1].mx);
}
void build(int now,int l,int r)
{
	tree[now].l=l;
	tree[now].r=r;
	if (l==r) tree[now].mx=a[l];
	else 
	{
		int mid=(l+r)>>1;
		build(now<<1,l,mid);
		build(now<<1|1,mid+1,r);
		wh(now);
	}
}
int  qurty(int now,int x,int y)
{
	int mx=0;
	if (tree[now].l==x&&tree[now].r==y) mx=max(mx,tree[now].mx);
	else 
	{
		int mid=(tree[now].l+tree[now].r)>>1;
		if (x>=mid+1) mx=max(mx,qurty(now<<1|1,x,y));
		else if (y<=mid) mx=max(mx,qurty(now<<1,x,y));
		     else {
		     	mx=max(qurty(now<<1,x,mid),qurty(now<<1|1,mid+1,y));
		     	
		     }
	}
	return mx;
}
int main()
{
	int n;
	int m;
	freopen("climb.in","r",stdin);
	freopen("climb.out","w",stdout);
	cin>>n;
	//freopen("w.in","r",stdin);
	for (int i=0;i<=n;i++)
		cin>>a[i];
		
	build(1,0,n);
	cin>>m;
	for (int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		cout<<qurty(1,x,y)<<endl;
	}
	return 0;
}