ST 求区间最大值板子

来源:互联网 发布:python与 shell 编辑:程序博客网 时间:2024/05/16 08:34

求区间最大值,st表板子


#include <cstdio>#include <cstring>#define N 200005int 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;}


原创粉丝点击