为什么不会RE
查看原帖
为什么不会RE
118426
EagleEye楼主2022/8/8 14:45
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],lg[50],z,x,y;
int f[100010][50];
void work(){
	lg[0]=-1;
	for(int i=1;i<=n;i++)lg[i]=lg[i/2]+1;
	for(int i=n;i>=1;i--){
		for(int j=1;i+(1<<j)-1<=n;j++){
			f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	//if(n>50)return 0;
	for(int i=1;i<=n;i++){
		scanf("%d",a+i);
		f[i][0]=a[i];
	}
	work();
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		int m=lg[y-x+1];
		printf("%d\n",max(f[x][m],f[y-(1<<m)+1][m]));
	}
	return 0;
}

lg数组开小了

2022/8/8 14:45
加载中...