尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

再谈ST表

再谈ST表
📅 发布时间:2026/6/21 15:00:46

再谈 ST 表

思想:倍增。

适用范围:对于一个不可修改的序列维护区间最大/最小值询问。

时间:\(O(n\log n)\) 预处理,\(O(1)\) 查询。

下文以最大值为例。

预处理

状态:设 \(f_{i,j}\) 表示区间 \([i,i+2^j-1]\) 的最大值。

那么递推式就有:

\[f_{i,j}=\max\left\{f_{i,j-1},f_{i+2^{j-1},j-1}\right\} \]

显然边界是 \(f_{i,0}=a_i\)。其中 \(a_i\) 是原序列。

图解:

其中第二个,区间右边界是 \(i+2^{j-1}+2^{j-1}-1=i+2^j-1\)。

查询

假设查询区间为 \([l,r]\)。

找到 \(\max\left\{k\mid 2^k<r-l+1\le 2^{k+1}\right\}\)。

把 \([l,r]\) 分解为 \([l,l+2^k-1]\cup [r-2^k+1,r]\)。

即从 \(l\) 开始的 \(2^k\) 个元素与 \(r\) 结尾的 \(2^k\) 个元素。

因为 \(2^k<r-l+1\le 2^{k+1}\),所以这俩区间一定可以覆盖整个查询区间。

对于 \(r-2^k+1\) 的解释:

\[r-2^k+1+2^k-1=r \]

所以式子就是:

\[\max\left\{f_{l,k},f_{r-2^k+1,k}\right\} \]

注意:ST 表是预处理完查询,所以不支持修改。

示例代码

例题:P3865 【模板】ST 表 & RMQ 问题

#include<bits/stdc++.h>
using namespace std;
typedef long long ljl;
#define FUP(i,x,y) for(auto i=(x);i<=(y);++i)
#define FDW(i,x,y) for(auto i=(x);i>=(y);--i)
inline void Rd(auto &num);
const int N=1e5+5,L=25;
int n,m,a[N];
namespace ST{int f[N][L],Lg2[N];void Build(){Lg2[1]=0;FUP(i,2,n)Lg2[i]=Lg2[i/2]+1;FUP(i,1,n)f[i][0]=a[i];FUP(j,1,20){FUP(i,1,n){if(i+(1<<(j-1))>n)break;f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);}}return;}int query(int l,int r){int lens=r-l+1;int k=Lg2[lens];return max(f[l][k],f[r-(1<<k)+1][k]);}
}
int main(){Rd(n);Rd(m);FUP(i,1,n)Rd(a[i]);ST::Build();int l,r;while(m--){Rd(l);Rd(r);printf("%d\n",ST::query(l,r));}return 0;
}
inline void Rd(auto &num)
{num=0;char ch=getchar();bool f=0;while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}while(ch>='0'&&ch<='9'){num=(num<<1)+(num<<3)+(ch-'0');ch=getchar();}if(f)num=-num;return;
}

相关新闻

  • 基于像素流的多游戏引擎实时云渲染系统设计与实现
  • 重塑Java工程效能:全流程智能开发平台实践解析
  • 实现kvstore的持久化功能:全量持久化和增量持久化

最新新闻

  • Web安全实战:从SQL注入到WAF绕过,手把手教你靶场攻防
  • [智能体-487]:文明四阶演进脉络:地球碳基文明→数字世界→硅基文明→星际文明
  • 2026年 高达空间节能送风系统推荐榜:高效节能与智能气流调控的全景解析及选购指南 - 品牌发掘
  • 仙桃音响改装难题终结者:音改坊汽车音响旗舰店3大核心优势揭秘,问界音响改装/问界原车音响升级,音响改装门店口碑推荐 - 音响改装门店分享
  • 永康黄金回收报价单位有猫腻吗?克和钱别换算错/金银金包银黄金回收/ 文娟珠宝黄金回收/老金黄金回收 - 回收测评
  • 从单点漏洞到批量挖掘:构建自动化RCE漏洞扫描体系实战

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号