比赛 Segment Tree Competition 评测结果 AAAAAAAAAA
题目名称 延绵的山峰 最终得分 100
用户昵称 灰里城 运行时间 0.563 s
代码语言 C++ 内存使用 15.57 MiB
提交时间 2016-08-28 19:08:28
显示代码纯文本
//最大值线段树
#include<iostream>
#include<stdio.h>
using namespace std;
const int maxn=1000000+10;
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
 
int te[maxn<<2]={0};
 
void build(int,int,int);
int Query(int,int,int,int,int);
 
int main()
{
	freopen("climb.in","r",stdin);
	freopen("climb.out","w",stdout);
	int n,nouse;
	scanf("%d%d",&n,&nouse);
	build(1,1,n);
	int m;
	scanf("%d",&m);
	for(int i=1;i<=m;++i)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		printf("%d\n",Query(1,1,n,l,r));
	}
	fclose(stdin);fclose(stdout);
	return 0;
}
void build(int rt,int l,int r)
{
	if(l==r){scanf("%d",&te[rt]);return;}
	int mid=(l+r)>>1;
	build(lson);build(rson);
	te[rt]=(te[rt<<1]>te[rt<<1|1]?te[rt<<1]:te[rt<<1|1]);
}
int Query(int rt,int l,int r,int s,int t)
{
	if(s<=l&&t>=r)return te[rt];
	int mid=(l+r)>>1;
	if(t<=mid)return Query(lson,s,t);
	if(s>mid)return Query(rson,s,t);
	int x=Query(lson,s,t),y=Query(rson,s,t);
	return x>y?x:y;
}