ACM入门之ST表/RMQ

Posted 辉小歌

tags:

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



st表的作用是可以快速的得到区间内的一个最值(最大值或最小值),不过它是静态的,即一旦初始化不能修改。
ST表它可以做到O(nlogn)预处理,O(1)查询最值。
ST表模板:

const int N=1e5+1;
int n,mx[N][20],mn[N][20],a[N];
int getmx(int l,int r)//区间[l,r]内的最大值
  int tmp=log2(r-l+1);
  return max(mx[l][tmp],mx[r-(1<<tmp)+1][tmp]);

int getmn(int l,int r)//区间[l,r]内的最小值
  int tmp=log2(r-l+1);
  return min(mn[l][tmp],mn[r-(1<<tmp)+1][tmp]);

void init()//构建ST表

    for(int i=1;i<=n;i++) mx[i][0]=mn[i][0]=a[i];
    for(int j=1;j<20;j++)
    
        for(int i=1;i+(1<<j)-1<=n;i++)
        
            mx[i][j]=max(mx[i][j-1],mx[i+(1<<j-1)][j-1]);
            mn[i][j]=min(mn[i][j-1],mn[i+(1<<j-1)][j-1]);
        
    
 

P3865 【模板】ST 表

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

RMQ问题之ST算法

ACM入门之线性筛

ACM入门之最短路

RMQ ST表

NYOJ 119 士兵杀敌 RMQ ST

RMQ-ST表 专题训练