初学类的继承,RE求助

P2880 [USACO07JAN] Balanced Lineup G

栈空间足够时不能复现 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


|