求助全RE
查看原帖
求助全RE
553904
yingbowen楼主2022/11/28 22:04
#include <bits/stdc++.h>
using namespace std;
int n,m;
long long a[10000005];
long long st[1000005][50];
long long fang[50];
long long quary(int l,int r){
	int k = log2(r-l+1);
	long long ge=fang[k];
	long long ans = max(st[l][k],st[r-ge+1][k]); 
	printf("%d\n",ans);
}
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 main(){
	cin >> n >> m;
	for(int i = 1;i<=n;i++){
		a[i] = read();
		st[i][0] = a[i];
	}
	fang[0] = 1;
	for(int i = 1;i<=20;i++){
		fang[i] = fang[i-1]*2;
	}
	for(int i = 1;i<=18;i++){
		for(int j = 1;j<=n;j++){
			st[j][i] = st[j][i-1];
			if(j+fang[i-1]>n)continue;
			st[j][i] = max(st[j][i],st[j+fang[i-1]][i-1]);
		}
	}
	for(int i = 1;i<=m;i++){
		int l=0,r=0;
		l=read();
		r=read();
		quary(l,r);
	}
}
2022/11/28 22:04
加载中...