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]);
以上是关于ACM入门之ST表/RMQ的主要内容,如果未能解决你的问题,请参考以下文章