24pts 求助%%%
查看原帖
24pts 求助%%%
221551
Bker_楼主2022/6/16 19:10
#include <bits/stdc++.h>
using namespace std;

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;
}

int a[2000010][25] ;
int n , m  ;

void getM(){
	for(int i = 1 ; i<= n ; i++){
		a[i][0] = read();
	}
}

void pre(){
	for(int j = 1 ; (1 << j) <= 25 ; j++)
		for(int i = 1 ; i + (1 << j) - 1 <= n ; i++){
			a[i][j] = max(a[i][j -1] , a[i + (1 << (j - 1))][j - 1]);
		}
}



int rmq(int l,int r)
{
    int k=log2(r-l+1); 
    return max(a[l][k],a[r-(1<<k)+1][k]);
}

int main(){
	n = read() , m = read() ;
	getM();
	pre() ;
	while(m--){
		int l = read()  , r = read() ; 
		cout<<rmq(l , r)<<endl;
	}
	return 0 ;
} 

样例过了 过了前三个点 求改

2022/6/16 19:10
加载中...