ST表

Posted lhm-

tags:

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

(O(n log n))预处理,(O(1))查询最值

(f[i][j])表示,从(i)位置开始的(2^j)个数中的最大值,例如(f[i][0])表示的是(i)位置的值,(f[i][1])表示的是(i)位置和(i+1)位置中两个数的最大值

(code)

void init()
{
    lg[0]=-1;
    for(int i=1;i<=n;++i) lg[i]=lg[i>>1]+1;
    for(int i=1;i<=n;++i) f[i][0]=a[i];
    for(int j=1;j<=20;++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]);
}

......

len=lg[r-l+1];//查询
ans=max(f[l][len],f[r-(1<<len)+1][len]);

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

将数据从底部工作表对话框片段传递到片段

LCA 算法ST表

模板st表

RMQ ST表

算法详解——st表

从底部工作表对话框片段中获取价值