12分求救,改了好久还是不对
查看原帖
12分求救,改了好久还是不对
1009473
roxithronycin楼主2023/6/7 16:58
 #include<bits/stdc++.h>
using namespace std;
const int N=100000;
int n,a[N+10],m,l,r;
int f[N+10][20]; 
int k[N+10]; 
//(1<<k)<=len<(1<<k+1)

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
		
	//对ST表预处理
	for(int i=1;i<=n;i++) f[i][0]=a[i];
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);
		}
	} 
	
	//对k预处理 
	k[1]=0;
	for(int i=1;i<=n;i++){
		k[i]=k[i/2]+1;/
	}
	
	//求区间内最大值 
	while(m--){
		scanf("%d%d",&l,&r);
		int len;
		len=l-r+1;
		printf("%d\n",max(f[l][k[len]],f[r-(1<<k[len])+1][k[len]]));
	}
	return 0;
}
 
2023/6/7 16:58
加载中...