ST表

ST表

# include <bits/stdc++.h>
using namespace std;

const int MAXN=1e5+100;
int a[MAXN];
int f[MAXN][20];
int len[MAXN];
int n,m;
void ST_len()
{
for(int i=1;i<=n;i++){
len[i]=log(i)/log(2);
}
return ;
}
void ST_prework()
{
for(int i=1;i<=n;i++) f[i][0]=a[i];
int t=log(n)/log(2)+1;
for(int j=1;j<t;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]);
}
}
return ;
}
int ST_query(int l,int r)
{
int k=len[r-l+1];
return max(f[l][k],f[r-(1<<k)+1][k]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
ST_len();
ST_prework();
for(int i=1;i<=m;i++){
int l,r; scanf("%d%d",&l,&r);
printf("%d\n",ST_query(l,r));
}

return 0;
}



posted @ 2022-02-26 23:21  fengzlj  阅读(49)  评论(0)    收藏  举报