```
if(az=='-1')
```
这个地方我就看不懂
by blue_wine @ 2021-07-03 22:15:20
@[happy_yuyu](/user/339966) 哦哦,谢谢
by pencil @ 2021-07-03 22:16:48
@[pencil](/user/137723) 除了那里,还有数组开太大了
by HYKkk @ 2021-07-03 22:17:20
@[F_O_S](/user/407664) 这下能编译过了谢谢
~~可MLE是什么意思啊啊啊啊啊~~
by pencil @ 2021-07-03 22:20:23
@[pencil](/user/137723) 感觉您的做法比较奇怪,两个维度都用到了 $n$ 级别,事实上一个维度应当是 $\log n$。
MLE 表示超出内存限制。
by LucasXu80 @ 2021-07-03 22:31:41
@[pencil](/user/137723) 应该是 29 行的代码有问题,因为输出的结果也不正确。
by LucasXu80 @ 2021-07-03 22:34:10
@[pencil](/user/137723) ~~要不您再去理解一下 ST表吧~~
这边建议重写,难度比改代码小。
by MilkyCoffee @ 2021-07-03 22:38:21
```cpp
#include<bits/stdc++.h>
using namespace std;int n,m,a[100100],e[100100][100100];
inline int read(){
int op=0,f=1;char az=getchar();
while(az<'0'||az>'9'){
if(az=='-1')
f=-1;
az=getchar();
}
while(az>='0'&&az<='9'){
op=op*10+az-'0';
az=getchar();
}
return op*f;
}
int find(int left,int right) {
int mid=log2(right-left+1);
return max(e[left][mid],e[right-(1<<mid)+1][mid]);
}
int main() {
int i,i2;
n=read();
m=read();//cout<<"m="<<m<<endl;
for(i=1;i<=n;i++){
e[i][0]=read();
}
for(i2=1;i2<=23;i2++){
for(i=1;i+(1<<i2)-1<=n;i++){
e[i][i2]=max(e[i][i2-1],e[i+(1<<(i2-1))][i2-1]);
}
}
int q,w;
for(i=1;i<=m;i++){
q=read();w=read();
printf("%d\n",find(q,w));
}
return 0;
}
```
主循环那里
i和i2反了
by MilkyCoffee @ 2021-07-03 22:46:07
@[pencil](/user/137723)
by MilkyCoffee @ 2021-07-03 22:46:17
@[Coffee_Latte](/user/317198) orz谢谢大佬
by pencil @ 2021-07-04 15:51:17