ST 表
ST 表
ST 表,主要思想是空间换时间,用于解决可重复贡献问题和 RMQ 问题。
可重复贡献问题
指某个运算 ,有 。例如 。
RMQ 问题
指在区间内的最大/最小值查询。
ST 表
ST 表基于倍增的思想,做到 的预处理时间, 的查询时间。副作用是不支持修改操作。
而 ST 表的实现类似于 dp,设 表示区间 的最大值。
而显然 。
为什么是 而不是 呢?
因为很巧,如果 ,则 ,得再减个一。
那么第二维的意思也就是在倍增的时候,调了 步。
那么状态转移方程:
可以基于下面这张图(神图)来理解。
对于每个询问 ,可以分成两部分,分别是 。
而 。
模板代码
代码:
#include<bits/stdc++.h> using namespace std; const int N=1e5+5,logn=21; int n,m,f[N][logn],Log[N],x,y,s; inline void init() { Log[1]=0; Log[2]=1; for(int i=3;i<N;i++) Log[i]=Log[i/2]+1; for(int j=1;j<=logn;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]); return; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&f[i][0]); init(); while(m--) { scanf("%d%d",&x,&y); s=Log[y-x+1]; printf("%d\n",max(f[x][s],f[y-(1<<s)+1][s])); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)