st表

Posted nent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了st表相关的知识,希望对你有一定的参考价值。

可以求RMQ问题

#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=100000+5;
int n,m,log[MAXN],a[MAXN],st[MAXN][21];
inline int query(int l,int r);
inline int read();
void ST();
int main()

    register int l,r,t;
    n=read(); m=read();
    log[0]=-1;
    for(register int i=1;i<=n;i++)
    
        st[i][0]=read();
        log[i]=log[i>>1]+1;
    
    ST();
    for(register int i=1;i<=m;i++)
    
        l=read(); r=read();
        printf("%d\n",query(l,r));
    
    return 0;

inline int read()

    int re=0,f=1;
    char ch=getchar();
    while(ch<0||ch>9)
    
        if(ch==-)
            f=-1;
        ch=getchar();
    
    while(ch>=0&&ch<=9)
    
        re=(re<<1)+(re<<3)+(ch^48);
        ch=getchar();
    
    return re*f;

void ST()

    for(register int j=1;j<=20;j++)
        for(register int i=1;i+(1<<j)-1<=n;i++)
            st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);

inline int query(int l,int r)

    int t=log[r-l+1];
    return max(st[l][t],st[r-(1<<t)+1][t]);

 

以上是关于st表的主要内容,如果未能解决你的问题,请参考以下文章

ST表

ST表超级详解

st表

st表

st表

ST表算法入门详解