ST表(倍增表)
介绍 st表 之前先看看 RMQ 问题是什么东西吧
RMQ
RMQ : Range Maximum/minimum Query
顾名思义,这就是指区间最大或最小值(区间最值)
ST表
ST表:Spars Table,一种可以解决 RMQ 的,基于 倍增 的数据结构
令 表示从 开始连续 个数中的最值,如果 后面的数不足 个则全取
转移方程:
- 数组可以递推得到
代码:
int x=log(n)/log(2); for(int j=1;j<=x;j++) for(int i=1;i<=n-(1<<j)+1;i++) f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
时间复杂度:
询问方式:
询问区间为 ,设 ,则区间 和 区间 一定覆盖了 这个区间内所有元素
所以答案为:
小优化:对于 ~ 每一个数先预处理 下取整的结果,每次讯问时即为 的复杂度
代码:
lg[0]=-1; for(int i=1;i<=n;i++) lg[i]=lg[i/2]+1; for(int i=1;i<=m;i++){ int le,r; scanf("%d%d",&le,&r); int x=r-le+1; printf("%d\n",max(f[le][lg[x]],f[r-(1<<lg[x])+1][lg[x]])); }
几道练手题:
需要思考一下的题:
本文作者:_yolanda
本文链接:https://www.cnblogs.com/yolanda-yxr/p/15896448.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步