求助
查看原帖
求助
346662
yezihao1楼主2022/1/29 17:12
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int a[maxn];
int f[maxn][21];
int lg[maxn<<1];
inline int read()
{
	register int f=0,x=0;register char ch=getchar();
	while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar();
	while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return f?-x:x;
}
inline void write(register int ans,register bool flag)
{
	if(ans<0)putchar('-'),ans=-ans;
	if(ans==0)
	{
		if(!flag) putchar('0');
		return ;
	}
	write(ans/10,true);
	putchar(ans%10^'0');
}
inline void init()
{
	lg[1] = 0;
    for (int i = 2 ; i <= 2*maxn ; ++ i) lg[i] = lg[i/2]+1;
}
int main()
{
	//freopen("P3865_4.in","r",stdin);
	//freopen("P3865_4.out","w",stdout);
	init();
	int n=read(),m=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read(); 
	 } 
	for(int i=1;i<=n;i++)
	{
		f[0][i]=a[i];
	}
	for(int k=1;(1<<k)<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			f[k][i]=max(f[k-1][i],f[k-1][i+(1<<(k-1))]);
		}
	}
	
	for(int i=1;i<=m;i++)
	{
		int a=read(),b=read();
		int len=lg[b-a+1];
		write(max(f[len][a],f[len][b-(1<<len)+1]),true);
		putchar('\n'); 
	}

	return 0;
	}

求助RMQ

2022/1/29 17:12
加载中...