感觉是边界错了但不知道为什么错
查看原帖
感觉是边界错了但不知道为什么错
889845
Wunsch楼主2023/1/28 20:29
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#define ll long long
#define ull unsigned long long
using namespace std;

ll m,n;
ll st[10000003][24];

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(){
	n=read();
	m=read();
	for(int i=1;i<=n;i++){
		st[i][0]=read();
	}
	int t=0;
	while(1<<(t+1)<=n)t++;
	for(int i=1;i<=t;i++)
	for(int j=1;j<=n-(1<<i)+1;j++)
	st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);
	
	while(m--){
		ll l,r;
		l=read();
		r=read();
		t=0;
		while((1<<(t+1))<=(r-l+1))t++;
		printf("%lld\n",max(st[l][t],st[r-(1<<t)+1][t]));
	}
	return 0;
}
2023/1/28 20:29
加载中...