版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[10100];
int f[10100][200];
void ST_prework(int n){
for(int i=1;i<=n;i++) f[i][0]=a[i];
int t=log(n)/log(2)+1;
for(int j=1;j<t;j++)
for(int i=1; i<=n-(1<<j)+1;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int ST_query(int l,int r)
{
int k=log(r-l+1)/log(2);
return max(f[l][k], f[r-(1<<k)+1][k]);
}
int main(void)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
ST_prework(n);
int x,r,l;
scanf("%d",&x);
while(x--)
{
scanf("%d%d",&l,&r);
cout<<ST_query(l+1,r+1)<<endl;
}
return 0;
}