本地没有问题,洛谷上为什么编译失败了呢

P3865 【模板】ST 表

``` 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


|