#include<iostream>#include<cstring>#include<algorithm>#include<cmath>usingnamespace std;constint N =2e5+5, M =18;int f[N][M], w[N];int n;voidinit(){
//区间dpfor(int j =0; j < M; j++){
for(int i =1; i +(1<<j)-1<= n; i++){
if(!j) f[i][j]= w[i];else{
f[i][j]=max(f[i][j-1], f[i +(1<<(j-1))][j-1]);}}}}intquery(int l,int r){
int len = r - l +1;int k =log(len)/log(2);returnmax(f[l][k], f[r -(1<<k)+1][k]);}intmain(){
scanf("%d",&n);for(int i =1; i <= n; i++)scanf("%d",&w[i]);init();int m;scanf("%d",&m);while(m --){
int l, r;scanf("%d%d",&l,&r);printf("%d\n",query(l, r));}return0;}
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>usingnamespace std;constint N =2e5+5, M =18;int f[N][M], w[N];int n;voidinit(){
//区间dpfor(int j =0; j < M; j++){
for(int i =1; i +(1<<j)-1<= n; i++){
if(!j) f[i][j]= w[i];else{
f[i][j]=max(f[i][j-1], f[i +(1<<(j-1))][j-1]);}}}}intquery(int l,int r){
int len = r - l +1;int k =log(len)/log(2);returnmax(f[l][k], f[r -(1<<k)+1][k]);}intmain(){
scanf("%d",&n);for(int i =1; i <= n; i++)scanf("%d",&w[i]);init();int m;scanf("%d",&m);while(m --){
int l, r;scanf("%d%d",&l,&r);printf("%d\n",query(l, r));}return0;}