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

再谈ST表

再谈 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;
}
http://www.zskr.cn/news/83762.html

相关文章:

  • miniconda anaconda下载
  • 双向RRT算法求解路径规划问题
  • Fortran 的英文数字验证码识别系统设计与实现
  • 如何找書
  • 面试必问:如何快速定位BUG?BUG定位技巧及N板斧!
  • 如何啓動一個本地服務
  • ROS2节点和话题
  • Wan2.2-T2V-A14B如何生成带有烟花绽放效果的节日庆典视频?
  • Jetson Secure Boot 完整实战指南:从 Fuse Key → Boot Chain → 验签代码路径的源码级解析
  • 5分钟快速上手MONAI 2D扩散模型:医学图像生成的终极指南
  • 程序员转行到大模型开发领域,以下是几个推荐的方向、推荐原因以
  • 机器学习基础(线性,逻辑回归)
  • Windows11制作docker linux-arm64镜像
  • Wsappx进程异常占用的深度解析与修复方案
  • 【2025必看】AI Agent技术全解析:从概念到开发框架的全面指南(建议收藏)
  • 2025年12月乌兹别克斯坦EAC认证,SGR认证,OTTC认证公司推荐,综合服务能力与资质解析 - 品牌鉴赏师
  • VS2022二次元背景板痛改教程!
  • 山西临汾卤制品制作技艺的技术路径分析
  • 2025最新的电子实验记录本软件,引领科研数字化变革的智能中枢
  • 12月11日日记
  • 【量子机器学习调试终极指南】:手把手教你用VSCode攻克QML代码难题
  • PyMe是一款面向大众的可视化低代码Python开发工具
  • Ubuntu系统火狐浏览器配置http代理
  • 1-Year XTOOL D9S PRO Update: Latest Diagnostics for European/American Mechanics Car Owners
  • 2025年苏州GEO排名产品TOP10,本地企业表现亮眼,企业短视频矩阵/ai排行榜/GEO排名/短视频矩阵/视频矩阵GEO排名厂商排行榜 - 品牌推荐师
  • 详细介绍:Chrome HSTS(HTTP Strict Transport Security)
  • 2025年12月上海别墅装修,上海极简风装修,上海新中式装修公司权威推荐,设计实力与市场口碑深度解析 - 品牌鉴赏师
  • 2025年机械手数控车床品牌价格排行:前十名多少钱一台?英伟达液冷数控车/车铣复合数控机床/医疗器械数控机床数控车床采购排行榜 - 品牌推荐师
  • 聚焦2025:这些数控车床品牌是军工精密加工的保障,液冷接头数控机床/军工配件数控机床/空调配件数控机床/动力刀塔数控车数控车床批发排行 - 品牌推荐师
  • 【笔记】队列