RT,我的代码为什么会 RE 呀?
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int INF=100005;
int n,m,lg[40],f[INF][40];
inline int read()
{
int x=0,f=1; char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while (isdigit(ch)) {x=x*10+ch-48; ch=getchar();}
return x*f;
}//快读。
inline int query_ask(int l,int r) {
int k=lg[r-l+1];
return max(f[l][k],f[r-(1<<k)+1][k]);
}//查询。
int main() {
n=read();
m=read();
lg[0]=-1;
for (int i=1; i<=n; i++) {
scanf("%d",&f[i][0]);
lg[i]=lg[i>>1]+1;
}
//读入并且处理 lg 数组,lg 数组的意义是 2^lg[i]<=i。
for (int i=1; i<=21; i++)
for (int j=1; j+(1<<i)-1<=n; j++)
f[j][i]=max(f[j][i-1],f[j+(1<<(i-1))][i-1]);
while (m--) {
int x=0,y=0;
x=read();
y=read();
printf("%d\n",query_ask(x,y));
}
return 0;
}