st
程序员文章站
2024-02-01 21:38:34
...
P3865 【模板】ST表
求区间最值
传送门
const int maxn=100005;
int a,n;
int f[maxn][22];
inline int read()
{
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
struct ST
{
void init()
{
_1for(i,n)
{
scanf("%d",&f[i][0]);
}
for(int j=1;j<=21;j++)
{
for(int i=1;i+(1<<j)-1<=n;i++)
{
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
}
int check(int l,int r)
{
int k=log2(r-l+1);
return max(f[l][k],f[r-(1<<k)+1][k]);
}
};
main(void)
{
int m;
n=read();
m=read();
ST P;
P.init();
_1for(i,m)
{
int l,r;
l=read();
r=read();
printf("%d\n",P.check(l,r));
}
}