求区间最大值,st表板子
#include <cstdio>
#include <cstring>
#define N 200005
int n,m,st[N][22],log[N];
inline int max(int x,int y){return x>y?x:y;}
inline int rmq(int l,int r){
if(l>r) return 0;
int k=log[r-l+1];
return max(st[l][k],st[r-(1<<k)+1][k]);
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&st[i][0]);
log[0]=-1;
for(int i=1;i<=n;++i) log[i]=log[i>>1]+1;
for(int i=1;i<=log[n];++i)
for(int j=1;j<=n;++j)
if(j+(1<<i-1)<=n) st[j][i]=max(st[j][i-1],st[j+(1<<i-1)][i-1]);
scanf("%d",&m);
while(m--){
int x,y;scanf("%d%d",&x,&y);
printf("%d\n",rmq(x,y));
}
return 0;
}