题目:https://www.luogu.com.cn/problem/P3865
测评记录:https://www.luogu.com.cn/record/110748267
代码:
#include<bits/stdc++.h>
using namespace std;
int Log[100005],f[100005][25];
int n,m,l,r;
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;
}
inline void print(int x)
{
if(!x)return;
print(x/10);
putchar(x%10+'0');
}
signed main()
{
for(int i=2;i<=100000;i++)
Log[i]=Log[i>>1]+1;
n=read();m=read();
for(int i=1;i<=n;i++)
f[i][0]=read();
for(int j=1;j<=Log[n];j++)
for(int i=1;i<=n-(1<<j)+1;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
for(int i=1;i<=m;i++)
{
cin>>l>>r;
int k=Log[r-l+1];
print(max(f[l][k],f[r-(1<<k)+1][k]));
puts("");
}
return 0;
}