buhui
查看原帖
buhui
932938
qianyichen20120322楼主2024/12/14 19:43
#include <bits/stdc++.h>
using namespace std;
int a[100005];
int dp[100005][1005];
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()
{
	int n=read(),m=read();
	for(int i=1;i<=n;i++)
		a[i]=read(),dp[i][0]=a[i];
	int len=1;
	for(int mi=1;len<=n;mi++)
	{
		len=1<<mi;
		for(int i=1;i+len-1<=n;i++)
		{
			int j=i+len-1;
			dp[i][mi]=max(dp[i][mi-1],dp[j-(1<<(mi-1)+1)][mi-1]);	
		}	
	}
	while(m--)
	{
		int l,r;
		l=read(),r=read();
		int x=floor(log2((r-l)+1));
		cout<<max(dp[l][x],dp[r+(1<<x)+1][x])<<endl;
	}
	return 0;
}
2024/12/14 19:43
加载中...