求区间最大值,st表板子
#include <cstdio>
#include <cstring>
#define N 200005
int n,m,st[N][22],log[N];
inline int max(int x,int y){return x>y?x:y;}
inline int rmq(int l,int r){
if(l>r) return 0;
int k=log[r-l+1];
return max(st[l][k],st[r-(1<<k)+1][k]);
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&st[i][0]);
log[0]=-1;
for(int i=1;i<=n;++i) log[i]=log[i>>1]+1;
for(int i=1;i<=log[n];++i)
for(int j=1;j<=n;++j)
if(j+(1<<i-1)<=n) st[j][i]=max(st[j][i-1],st[j+(1<<i-1)][i-1]);
scanf("%d",&m);
while(m--){
int x,y;scanf("%d%d",&x,&y);
printf("%d\n",rmq(x,y));
}
return 0;
}

本文介绍了一种使用ST表解决区间最大值查询问题的方法。通过预处理建立ST表,可以快速查询任意区间内的最大值,适用于需要频繁进行区间查询的应用场景。

534

被折叠的 条评论
为什么被折叠?



