24分RE
查看原帖
24分RE
230808
Zxsoul楼主2020/10/2 11:51
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<set>
#include<map>
#include<queue>
using namespace std;
const int manx=5009;
const int mamx=100001;
typedef long long LL;
inline int read() {
    int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
    for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}  
long long  n,m;
int   lg2[mamx],f[10009][100],a[mamx];
inline void ST(){
	for (int i = 1;i <= n; i++) f[i][0] = a[i];
	for (int j = 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]);
		 } 
	for (int i = 2;i <= n; i++)
		{
		   lg2[i] = lg2[i >> 1] + 1; 	
		}
}
int RMQ(int l,int r){
	int k = lg2[r - l + 1];
	return max ( f[l][k],f[r - (1 << k) + 1][k]);    
} 
int main(){
	n = read();
	m = read();
	for (int i = 1;i <= n; i++){
		cin >> a[i];
		ST();	
	}
	for (int i = 1;i <= m; i++){
		int x = read(),y = read();
		cout<<RMQ(x,y)<<endl;
	}
}


2020/10/2 11:51
加载中...