#include<iostream>
#include<cstdio>
#define MAXN 100005
using namespace std;
int n,m;
long long a[MAXN],d[MAXN][18];
inline int read ()
{
int n=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9')
{
n=n*10+ch-'0';
ch=getchar();
}
return n;
}
inline void RMQ_pre()
{
for(int i=1;i<=n;i++)
{
d[i][0]=read();
}
for(int j=1;(1<<j)<=n;j++)//(1<<j)<=n
for(int i=1;i+(1<<j)-1<=n;i++)//i+(1<<j)-1<=n
d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
}
inline int RMQ(int l,int r)
{
int k=0;
while((1<<k)<=r-l+1) k++;
k--;
return max(d[l][k],d[r-(1<<k)+1][k]);
}
int main()
{
n=read();
m=read();
RMQ_pre();
for(int i=1;i<=m;i++)
{
int l=read(),r=read();
printf("%d\n",RMQ(l,r));
}
return 0;
}
RMQ
最新推荐文章于 2021-12-26 11:56:54 发布