ST 表(Sparse Table)算法详解:原理、实现与应用
1. 什么是 ST 表ST 表Sparse Table稀疏表是一种用于解决静态区间最值查询RMQ问题的数据结构。它可以在 O(n log n) 的预处理时间后以 O(1) 的时间复杂度回答任意区间 [l, r] 的最小值、最大值、最大公约数等可重复贡献问题的查询。2. 核心思想与原理ST 表的核心思想是倍增和动态规划。对于长度为 n 的数组 arr我们预处理一个二维数组 st[i][j]表示从位置 i 开始长度为 2^j 的区间即区间 [i, i 2^j - 1]的查询结果如最大值。状态转移方程为st[i][j] f(st[i][j-1], st[i 2^(j-1)][j-1])其中 f 是满足可重复贡献性质的二元运算如 max、min、gcd 等。对于查询区间 [l, r]我们找到最大的 k 使得 2^k ≤ (r - l 1)然后通过两个长度为 2^k 的区间覆盖 [l, r]ans f(st[l][k], st[r - 2^k 1][k])由于运算 f 满足可重复贡献性质即使这两个区间有重叠最终结果也是正确的。3. 算法实现C3.1 预处理#include bits/stdc.h using namespace std; const int MAXN 1e5 5; const int LOG 20; // log2(MAXN) int st[MAXN][LOG]; int log2_pre[MAXN]; // 预处理 log2 值 void preprocess(vectorint arr) { int n arr.size(); // 预处理 log2 值 log2_pre[1] 0; for (int i 2; i n; i) { log2_pre[i] log2_pre[i / 2] 1; } // 初始化长度为 1 的区间 for (int i 0; i n; i) { st[i][0] arr[i]; } // 动态规划构建 ST 表 for (int j 1; j LOG; j) { for (int i 0; i (1 j) - 1 n; i) { st[i][j] max(st[i][j-1], st[i (1 (j-1))][j-1]); } } }3.2 查询操作int query(int l, int r) { int k log2_pre[r - l 1]; return max(st[l][k], st[r - (1 k) 1][k]); }4. 时间复杂度分析预处理O(n log n)单次查询O(1)空间复杂度O(n log n)与线段树查询 O(log n)相比ST 表在查询速度上更有优势但不支持修改操作适用于静态数据场景。5. 应用场景静态 RMQ 问题数组固定不变频繁查询区间最值LCA最近公共祖先结合欧拉序和 ST 表可以在 O(1) 时间内回答 LCA 查询区间 GCD 查询同样满足可重复贡献性质二维 RMQ扩展到二维数组的静态区间查询竞赛编程常用于需要快速区间查询的题目6. 优缺点总结优点缺点查询速度极快O(1)不支持修改操作代码实现相对简单空间复杂度较高O(n log n)适用于静态数据场景只能处理可重复贡献问题可扩展到多维预处理时间较长7. 实战例题7.1 洛谷 P3865 【模板】ST 表题目描述给定一个长度为 n 的数列和 m 次询问每次询问区间 [l, r] 的最大值。#include bits/stdc.h using namespace std; const int MAXN 1e5 5; const int LOG 17; int st[MAXN][LOG]; int log2_pre[MAXN]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin n m; vectorint arr(n); for (int i 0; i n; i) { cin arr[i]; } // 预处理 log2 log2_pre[1] 0; for (int i 2; i n; i) { log2_pre[i] log2_pre[i / 2] 1; } // 构建 ST 表 for (int i 0; i n; i) { st[i][0] arr[i]; } for (int j 1; j LOG; j) { for (int i 0; i (1 j) - 1 n; i) { st[i][j] max(st[i][j-1], st[i (1 (j-1))][j-1]); } } // 处理查询 while (m--) { int l, r; cin l r; l--; r--; // 转换为 0-based int k log2_pre[r - l 1]; cout max(st[l][k], st[r - (1 k) 1][k]) \n; } return 0; }8. 扩展与变种8.1 支持其他运算ST 表可以支持任何满足可重复贡献和结合律的运算最小值min最大公约数gcd按位与按位或|8.2 二维 ST 表对于二维数组可以预处理四维数组 st[x][y][kx][ky]表示以 (x, y) 为左上角宽度为 2^kx高度为 2^ky 的矩形区域的查询结果。9. 总结ST 表是解决静态区间查询问题的利器特别适合查询频繁但数据不变的场景。虽然不支持修改但其 O(1) 的查询复杂度在竞赛和某些工程场景中具有明显优势。掌握 ST 表的关键在于理解倍增思想和可重复贡献性质这有助于将其应用到更广泛的问题中。

相关新闻

400电话底层技术拆解与企业落地实战:路由原理、呼叫架构、风控合规与对接方案

400电话底层技术拆解与企业落地实战:路由原理、呼叫架构、风控合规与对接方案

标签:#400电话 #企业通信 #呼叫路由 #语音中继 #通信合规 #企业客服架构阅读对象:后端开发、通信架构师、企业IT运维、系统集成、客服系统对接工程师核心摘要:多数开发者和企业运维仅把400电话当作“企业热线号码”,但不清楚其中继…

2026/7/22 23:02:05阅读更多 →
【JAVA毕设源码分享】基于springboot在线考试系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot在线考试系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/22 23:02:05阅读更多 →
【JAVA毕设源码分享】基于springboot云与糖蛋糕购物平台系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot云与糖蛋糕购物平台系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/22 23:02:05阅读更多 →
通义千问办公套件开发实战:从API集成到智能体构建

通义千问办公套件开发实战:从API集成到智能体构建

1. 通义千问办公套件与AI智能体平台概述在数字化转型浪潮中,企业办公效率的提升越来越依赖于智能化工具的支持。阿里推出的通义千问办公套件正是基于这一背景诞生的企业级AI解决方案,它整合了文档处理、会议管理、日程安排等核心办公场景,通过…

2026/7/23 2:26:54阅读更多 →
深入解析EPI时序扩展寄存器:ARM Cortex-M外部存储接口稳定性的关键

深入解析EPI时序扩展寄存器:ARM Cortex-M外部存储接口稳定性的关键

1. 项目概述:为什么需要深入理解EPI时序扩展寄存器?在嵌入式系统开发中,尤其是基于Tiva™ C系列这类高性能ARM Cortex-M微控制器的项目,我们常常会遇到一个核心矛盾:MCU内核的运算速度越来越快,但片内Flash…

2026/7/23 2:26:54阅读更多 →
SECDED ECC原理与FMC诊断模式在功能安全系统中的应用

SECDED ECC原理与FMC诊断模式在功能安全系统中的应用

1. 项目概述:SECDED ECC与FMC诊断模式深度解析在嵌入式系统,尤其是汽车电子和工业控制领域,数据的完整性就是系统的生命线。想象一下,一辆高速行驶的汽车,其发动机控制单元(ECU)的Flash存储器中…

2026/7/23 2:26:54阅读更多 →
尼康D7500套机评测:APS-C画幅单反的平衡之道与实战指南

尼康D7500套机评测:APS-C画幅单反的平衡之道与实战指南

1. 先搞清楚 D7500 套机到底适合谁,不适合谁如果你正在看中端单反,预算在 8000 到 10000 元,想找一个能拍照片、偶尔录视频、镜头覆盖日常焦段的套机,尼康 D7500 配 18-140mm 这款组合确实值得重点考虑。但如果你指望它干专业视频…

2026/7/23 2:26:54阅读更多 →
机房共建模式解析:盈利结构与成本优化策略

机房共建模式解析:盈利结构与成本优化策略

1. 机房共建模式的商业本质机房共建本质上是一种资源整合的轻资产运营模式。不同于传统IDC企业自建机房的"重资产"路线,共建模式通过多方协作实现资源最优配置。我接触过的几个典型案例中,常见的是由场地提供方(如产业园区&#xf…

2026/7/23 2:26:54阅读更多 →
Codex接入第三方API的常见问题与解决方案

Codex接入第三方API的常见问题与解决方案

1. Codex接入第三方API的典型痛点解析当开发者尝试将Codex与第三方API对接时,往往会遇到几个高频问题。最常见的就是API调用时的400 Bad Request错误,这通常由于请求参数格式不符或缺失必要字段导致。比如拼多多API要求严格的签名验证机制,而…

2026/7/23 2:24:53阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →