比赛 Segment Tree Competition 评测结果 AAAAAAAATT
题目名称 延绵的山峰 最终得分 80
用户昵称 FoolMike 运行时间 2.235 s
代码语言 C++ 内存使用 76.58 MiB
提交时间 2016-08-28 21:20:09
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1000010;
int dp[N][20],n,m,t[20];
int main()
{
	freopen("climb.in","r",stdin);
	freopen("climb.out","w",stdout);
	for (int i=0;i<20;i++) t[i]=(1<<i);
	scanf("%d",&n);n++;
	for (int i=1;i<=n;i++) scanf("%d",&dp[i][0]);
	for (int j=1;j<20;j++)
	for (int i=1;i<=n-t[j]+1;i++)
		dp[i][j]=max(dp[i][j-1],dp[i+t[j-1]][j-1]);
	scanf("%d",&m);
	while (m--){
		int l,r;
		scanf("%d%d",&l,&r);
		l++;r++;
		int lg=log2(r-l+1);
		printf("%d\n",max(dp[l][lg],dp[r-t[lg]+1][lg]));
	}
	return 0;
}