#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1e6+10;
int n,m;
int f[maxn][50];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;}
while (ch>='0'&&ch<='9')
{
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
int main()
{
n = read(),m = read();
for(int i = 1;i <= n; i++)
f[i][0] = read();
for(int j = 1;j <= log2(n); j++)
for(int i = 1;i+(1<<j)-1 <= n; i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
for(int i = 1;i <= m; i++)
{
int x,y;
x=read(),y=read();
int len = (int)log2(y-x+1);
printf("%d\n",max(f[x][len],f[y-(1<<len)+1][len]));
}
}
为什么T了11个点啊,
求助~