栈空间足够时不能复现 RE。
关于样例输出全 0 的问题:从基类调用派生类的[函数应该标注 `virtual`](https://zh.cppreference.com/w/cpp/language/virtual)。
by ud2_ @ 2023-05-11 14:03:12
@[ud2_](/user/206953) 确实,在Luogu IDE跑起来了
by zymooll @ 2023-05-11 14:03:36
@[ud2_](/user/206953) 好的,过了编译
```cpp
// Author:zymooll
#include<bits/stdc++.h>
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#define int long long
using namespace std;
int read(){
int s=0,w=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')w=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
s=s*10+c-'0';
c=getchar();
}
return s*w;
}
void print(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>=10)print(x/10);
putchar(x%10+'0');
return;
}
const int MAXN=50000;
int n,q;
int l[MAXN];
int a[MAXN];
class ST_Base{
public:
int st[MAXN][18];
virtual int cmp(int aa,int bb){}
void init(){
for(int i=1;i<=n;i++){
st[i][0]=a[i];
}
for(int j=1;j<=l[n];j++){
for(int i=1;i<=n-(1<<j)+1;i++){
st[i][j]=cmp(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
}
}
int ask(int L,int R){
return cmp(st[L][l[R-L+1]],st[R-(1<<(l[R-L+1]))+1][l[R-L+1]]);
}
};
class ST_MAX:public ST_Base{
public:
int cmp(int aa,int bb){
return max(aa,bb);
}
};
class ST_MIN:public ST_Base{
public:
int cmp(int aa,int bb){
return min(aa,bb);
}
};
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=read(),q=read();
l[1]=0;
l[2]=1;
for(int i=3;i<=n;i++){
l[i]=l[i>>1]+1;
}
for(int i=1;i<=n;i++){
a[i]=read();
}
ST_MAX smax;
ST_MIN smin;
smax.init();
smin.init();
for(int i=1;i<=q;i++){
int L=read(),R=read();
print(smax.ask(L,R)-smin.ask(L,R));
putchar('\n');
}
return 0;
}
```
by zymooll @ 2023-05-11 14:06:07
@[zymooll](/user/289296) 对于最新那份,好像用数组存会有问题,改成 `std :: array` 就过了
by jijidawang @ 2023-05-11 15:25:13
应该是共用一个位置了
by jijidawang @ 2023-05-11 15:25:39