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