#include<math.h>
#include<stdio.h>
//小白窝不讲题hhh
int num=1;
int start,end;
int dp[1000][1000];
int max(int m,int n)
{
if(m>=n)
return m;
else
return n;
}
int SQRT(int n) //求2的n次方
{
int t=n%2;
if(n==0) return 1;
if(n==1) return 2;
else if(t==0)
{
n/=2;
return (SQRT(n)*SQRT(n));
}
else
{
n-=1;
return (2*SQRT(n));
}
};
void RMQ(int num,int zhishu)
{
for(int j = 1; j <= zhishu; ++j)
for(int i = 1;i<=num; ++i)
{
if(i-1 + (1<<j) > num)
{
break;
}
dp[i][j] = max(dp[i][j - 1], dp[i + (1<<(j-1))][j - 1]);//这式子太神了。。。
}
}
int main(void)
{
printf("请输入An的项,组合键结束\n");
while(scanf("%d",&dp[num][0])!=EOF)
{
num++;
};
printf("请输入查询项数的起点与终点,组合键结束\n");
int j=log(double(num))/log(2.0);
RMQ(num,j);
while(scanf("%d%d",&start,&end)!=EOF)
{
int j2=log(end-start+1)/log(2);
printf("%d",max(dp[start][j2],dp[end-SQRT(j2)+1][j2]));
}
}