有没有一种可能,你这句话数组越界了
```cpp
a[i][j]=max(a[i][j-1],a[i+(1<<(j-1))][j-1]);
```
by gujiga @ 2022-11-21 21:37:32
```cpp#include<bits/stdc++.h>
using namespace std;
const int N=100050;
int a[N][20];
int n,m;
int b[N];
void build()
{
int t=log(n)/log(2)+1;
for(int j=1;j<t;j++)
for(int i=1;i<=n;i++)//注意循环边界
a[i][j]=max(a[i][j-1],a[i+(1<<(j-1))][j-1]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
a[i][0]=b[i];
}
build();
int x,y;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
int k=log(y-x+1)/log(2);
printf("%d\n",max(a[x][k],a[y-(1<<k)+1][k]));
}
return 0;
}
```
by amend @ 2022-11-21 21:39:56
@[gujiga](/user/327969) 谢谢大佬
by ysw0521nb @ 2022-11-21 22:04:24
@[WSXZCLXS](/user/780168) 谢谢大佬
by ysw0521nb @ 2022-11-21 22:04:52