当前位置: 首页 > news >正文

ST表学习笔记

前置知识:倍增

其实倍增就是二进制拆分,因为有的数可能很大,我们按照2的幂次去查询,就能用 \(log_2n\) 的时间复杂度求解

ST 表

创建

ST 表运用的是倍增思想,我们可以用 \(O(nlogn)\) 的时间创建一个二维表,根据倍增思想就可以实现 \(O(1)\) 的区间最值查询(RMQ 查询)

我们这样定义:

定义 \(dp[i,j]\) 表示 \([i,i+2^j-1]\) 区间的最值,易得这个区间的长度为 $ 2^j$ ,那么根据倍增,这个区间可以分成两个长度为 $ 2^{j-1} $ 的区间,使用递推求解,递推式如下(max 可换成 min):

\[dp[i,j]=\max(dp[i,j-1],dp[i+2^{j-1},j-1]) \]

那么我们可以得出模板代码:

void init_st(){int k=log2(n);for(int i=1;i<=n;i++){dp[i][0]=a[i];}for(int j=1;j<=k;j++){for(int i=1;i<=n-(1<<j)+1;i++){dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);}}
}

这里先枚举 \(k\) 是因为我们需要通过 \(k\) 来确定枚举的右区间,不然范围就会超过 \(n\)

查询

我们要查询的是一个 \([l,r]\) 区间,我们可以这样理解一下:

C__Users_Administrator.DESKTOP-JVRO3LD_AppData_Roaming_com.codexu.NoteGen_article_笔记_assets_6962c137-a758-4eac-b44a-4184ed33480c

我们只要找到一个最大的不超过 \(l,r\) 长度的 2 的幂次 \(k\),就能用建好的 ST 表计算答案。

而根据对数的定义:

\[\log_2n=a \to 2^a=n \]

所以,我们有($ [l,r]$ 表示 \(l,r\) 这个区间的长度):

\[\log_2[l,r]=k\to 2^k=[l,r] \]

所以 \(k\) 的答案是\(\log_2 r-l+1\),其中 \(r-l+1\) 求的是区间 \([l,r]\) 的长度。

那么就能够得出查询的公式:

\[k=\log_2r-l+1\\ ans=\max(dp[l][k],dp[r-2^k+1][k]) \]

所以代码就很好写:

int k=__lg(y-x+1);
cout<<max(dp[x][k],dp[y-(1<<k)+1][k])<<endl;

总结

ST 表是基于倍增思想完成的一种支持 RMQ问题(静态区间最值问题查询)的数据结构

ST 表能够实现 \(O(n\log n)\) 建表

尝试独自完成洛谷 P3865 【模板】ST 表 & RMQ 问题

http://www.sczhlp.com/news/188660/

相关文章:

  • 谈一类易实现的非四毛子线性 RMQ
  • 我们学会在具体情境中做出恰当判断
  • 编译安装nginx
  • 福州专业网站制作贵阳公众号开发公司
  • 浙江省城乡与住房建设部网站怎么自己做游戏
  • 在哪找做网站的邯郸网站seo
  • 临沂建网站哪家好哈尔滨广告制作公司
  • 网站营销型企业销售平台哈尔滨seo排名优化免费咨询
  • 网站建设qq群重庆seo多少钱
  • 多就能自己做网站有什么平台可以做网站
  • 如果查询网站内页的收录情况能自己创造游戏的软件
  • 织梦网站创建商品栏目新建网站如何推广
  • 网站开发 佛山基于jsp的网站开发的文献
  • 建设人行官方网站下载微信商城网站模板
  • 如何删除在凡科上做的网站家在深圳 安居公租
  • 建设局施工许可证网站网页设计与制作教程第二版考试
  • 做PS的赚钱的网站1688货源网一件代发玩具
  • 丽水哪里做网站赣州网站设计有哪些
  • 网络营销网站建设公司网站建设询价采购
  • 网站建设毕业答辩ppt模板下载移动互联网 商业模式
  • 广州网站建设开发公司明朝传奇网页游戏
  • 如何用织梦搭建网站叮当设计网站
  • 如何修改网站ico网站 建设设计方案
  • 建筑人才网官方网站评职称网站开发心得500字
  • 用python 做网站网站建设公司南宁
  • 网站有图片的验证码是怎么做的网站开发怎么学
  • 网站设计一般是什么专业提高网站排名软件
  • 做同步网站本土建站工作室
  • 分布式结构化存储系统-HBase访问方式
  • 【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法