怎么输都是0,求大佬帮助

P3865 【模板】ST 表

```cpp int main(){ n=read(), m=read(); for(int i=1;i<=n;i++) a[i]=read(); init(); for(int i=1;i<=m;i++){ l=read(), r=read(); printf("%d\n", max_query(l,r)); } return 0; } ```
by SuperAlex4 @ 2023-12-20 23:29:25


@[SuperAlex4](/user/179187) 加了之后还是过不了怎么办
by simple1first @ 2023-12-25 22:03:17


```cpp #include<bits/stdc++.h> using namespace std; const int x = 2e5+2; int n,m,l,r,a[x],stmax[x][25]; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();} return x*f; } void init(){ for (int i=1;i<=n;i++) stmax[i][0]=a[i]; // for (int j=1,b=1;j<25;j++,b*=2){ // for (int i=1;i<=n-2*b+1;i++){ // stmax[i][j]=max(stmax[i][j-1],stmax[i+b][j-1]); // } // } } int max_query(int l,int r){ int len = log2(r-l+1); return max(stmax[l][len],stmax[r-(1<<len)+1][len]); } int main(){ n=read(), m=read(); for(int i=1;i<=n;i++) a[i]=read(); init(); for(int i=1;i<=m;i++){ l=read(), r=read(); cout << max_query(l,r); } return 0; } ``` 这是你的代码 @[simple1first](/user/1124986) 把 `init()` 的注释去掉然后输出加上换行符(`\n`)就可以过了
by SuperAlex4 @ 2023-12-25 22:35:24


@[SuperAlex4](/user/179187) 后面三个测试点的时间超了怎么办
by simple1first @ 2023-12-28 21:35:41


@[simple1first](/user/1124986) `endl` 比较慢 可以用 `\n`
by SuperAlex4 @ 2023-12-29 12:00:36


@[SuperAlex4](/user/179187) 谢谢
by simple1first @ 2023-12-30 11:54:46


|