ST表与RMQ(倍增表)

news2024/11/25 0:34:25

【概述】

RMQ : Range Maximum/minimum Query   这就是指区间最大或最小值(区间最值)

ST表:Spars Table,一种可以解决 RMQ 的,基于倍增的数据结构,利用 ST 算法预处理打出的表,称为 ST 表。

ST 算法:对于 RMQ 问题,给出 n 个数 m 次询问,每次询问区间最值,当 m 较小时,使用暴力即可解决,但随着 m 的增大,O(logn) 的的询问处理已经不够,需要 O(1) 的询问。而 ST 算法可以在 O(nlogn) 时间内进行预处理,然后在 O(1) 时间内回答每个查询,其实际上就是一种动态规划与打表的思想,缺点是不支持修改操作。

一、原理

       要在 O(1) 求出区间的最值,一个很自然的想法是用动态规划处理的方法,用 dp[i][j] 来记录区间 [i,j] 的最大值,这样显然有状态转移方程:dp[i][j]=max(dp[i][j-1],a[j])。

dp[][]12345678910
15577121212121215
237712 1212121215 
377121212121215  
42121212121215   
5121212121215   
6166815     
766815      
84815       
9815        
1015         

        但这样预处理是 O(n*n) 的,所以还要进一步的优化。

        1、预处理(创建ST表)

        max 函数满足一个性质:允许区间重叠,即 max(i,j)=max( max(i,k) , max(k,j) ),也就是说,可以由两个较小的有重叠的区间,直接推出一个大区间,从而减少维护的区间数量。

例如:有数组A 为:5 3 7 2 12 1 6 4 8 15   则下表为该数组的ST表

F[ ][ ]2^0=12^1=22^2=42^3=8
155712
2371212
3771215
421212 
5121212 
6168 
76615 
848  
9815  
1015   

       DP的状态:采用倍增的思想,假设是要求数组A[i]的区间最值,F[i,j] 表示从第 i 个数起连续 2^j 个数中的最大值。

       F[1][0] 表示第 1 个数起,长度为 2^0=1 的最大值,其实就是 5。

       F[1][1] = max(5,3) = 5  表示第 1 个数起,长度为 2^1=2 的最大值,其实就是 5。

       F[1][2] = max(5,3,7,2) = 7  表示第 1 个数起,长度为 2^2=4 的最大值,其实就是 7。

       F[1][3] = max(5,3,7,2,12,1,6,4)=12表示第 1 个数起,长度为 2^3=8 的最大值,其实就是 12。

       F[2][2] = max(3,7,2,12)=12表示第 2 个数起,长度为 2^2=4 的最大值,其实就是 12。

       DP的初始值: 可以看出 F[i,0] = A[i]

       状态转移方程: 把 F[i][j] 平均分成两段 ( F[i][j] 一定是偶数个数字),从 i 到 i+2^(j-1)-1 为一段,i+2^(j-1) 到 i+2^j-1 为一段,长度均为 2^(j-1)。

       于是得到F[i][j] = max( F[i] [ j-1] , F[i+2^(j-1) ] [j-1] )

        F[3][2]=max(F[3][1],F[5][1])表示从第3个数起,长度为 2^2=4 的最大值,也就是长度为4的最大值,可以由前一列长度为2的两个最大值比较得出。

void ST_create()
{	for(int i = 1;i<=n;i++)F[i][0] = a[i];
	int k=log2(n);  //k=log(n)/log(2)
	for(int j = 1;j<=k;j++)
    {	for(int i = 1;i<=n-(1<<j)+1;i++)
        	st[i][j] = max(F[i][j-1],F[i+(1<<(j-1))][j-1]);	//前一列是跨多少长度,第二个数的行坐标就跨多少行	
	}
}
      2、查询

      假设要查询的区间为 (L,R),那么需要找到覆盖这个闭区间 [L,R] 的最小幂。

      由于区间长度为 R-L+1,因此可以取 s=log2(R-L+1),

      则有:RMQ(L, R) = max{ F[L][s] , F[ R-2^s+1][s] }

      例:要求区间 [1,5] 的最大值

      则有:s= log2(5-1+1) = 2

      则:RMQ(1,5) = max( F[1][2] , F[5-2^2+1][ 2]) = max(F[1][2] , F[2][2])

void ST_query(int l,int r)//求区间[l..r]的最值 
{	int s=log2(r-l+1);
    return  max(F[l][s],F[r-(1<<s)+1)][s]);	//取两个区间最值 
}

模板题:洛谷P3865 【模板】ST 表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMC Unity存储系统如何查看SSD的使用寿命

为什么要写这个博客&#xff1f; 客户对老的EMC unity的存储系统要扩容&#xff0c;如何确定SSD磁盘是全新的还是拆机二手的&#xff1f;很多时候客户还有一个奇葩的要求&#xff0c;就是要和5年前的磁盘PN一致&#xff0c;甚至要求固件版本一致&#xff0c;最关键的还要求是全…

【LeetCode】每日一题 2023_11_4 数组中两个数的最大异或值

文章目录 刷题前唠嗑题目&#xff1a;数组中两个数的最大异或值题目描述代码与解题思路 结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;数组中两个数的最大异或值 题目链接&#xff1a;421. 数组中两个数的最大异或值 题目描述 代…

分享去视频/图片水印的工具(完结篇)

简介 视频去水印是在数字时代日益重要和频繁的需求之一。水印是一种保护版权和确认身份的常见手段&#xff0c;但在某些情况下&#xff0c;水印可能会对视频内容产生负面影响&#xff0c;因此需要去除。 首先&#xff0c;视频去水印可以改善视频观看体验。有些视频平台或个人会…

非常有用的工具箱IT-Tools

什么是 IT-Tools &#xff1f; IT-Tools 汇集了 70 多种对开发人员和 IT 工作人员有用的工具。这个令人惊叹的工具的酷炫之处在于它不需要设置&#xff0c;不需要持久卷&#xff0c;您可以立即开始使用它。它包含大量工具&#xff0c;可生成密码、编辑 CSS 和 HTML 代码、文件格…

Blazor组件

Blazor组件 前言&#xff1a;博主文章仅用于学习、研究和交流目的&#xff0c;不足和错误之处在所难免&#xff0c;希望大家能够批评指出&#xff0c;博主核实后马上更改。 组件&#xff1a; Blazor 应用基于 Razor 组件&#xff0c;通常仅称为组件。 组件是 UI 的一个元素&…

自动驾驶算法(五):Informed RRT*算法讲解与代码实现(基于采样的路径规划) 与比较

目录 1 RRT*与Informed RRT* 2 Informed RRT*代码解析 3 完整代码 4 算法比较 1 RRT*与Informed RRT* 上篇博客我们介绍了RRT*算法&#xff1a;我们在找到一个路径以后我们还会反复的搜索。 Informed RRT*算法提出的动机(motivation)是能否增加渐近最优的速度呢&#xff1f;…

【腾讯云HAI域探秘】速通腾讯云HAI

速览HAI 产品简介 腾讯云高性能应用服务(Hyper Application lnventor&#xff0c;HA)&#xff0c;是一款面向 Al、科学计算的 GPU 应用服务产品&#xff0c;为开发者量身打造的澎湃算力平台。无需复杂配置&#xff0c;便可享受即开即用的GPU云服务体验。在 HA] 中&#xff0c;…

3000 台 Apache ActiveMQ 服务器易受 RCE 攻击

超过三千个暴露在互联网上的 Apache ActiveMQ 服务器容易受到最近披露的关键远程代码执行 (RCE) 漏洞的影响。 Apache ActiveMQ 是一个可扩展的开源消息代理&#xff0c;可促进客户端和服务器之间的通信&#xff0c;支持 Java 和各种跨语言客户端以及许多协议&#xff0c;包括…

Sentinel热点参数限流动

什么是热点 限流是统计访问某个资源的所有请求&#xff0c;判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求&#xff0c;判断是否超过QPS阈值。 何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据&am…

关于Intel Press出版的《Bedyong BIOS》第2版的观后感

文章目录 此书的背景UEFI运行时DXE基础CPU架构协议PCI协议UEFI驱动的初始化串口DXE驱动示例 《Beyond BIOS》首先介绍一个简单的UEFI应用程序模块&#xff0c;用于展示UEFI应用程序的行为。作者为Waldo。该模块名为“InitializeHelloApplication”&#xff0c;它接受两个参数&a…

云栖大会,到底有些啥?

引言&#xff1a;10月31日至11月2日&#xff0c;2023云栖大会在杭州云栖小镇召开。小枣君去了现场&#xff0c;拍了一些照片&#xff0c;特来给大家做一个图文汇报。 云栖大会的前身&#xff0c;是2009年开始举办的地方网站峰会。2011年&#xff0c;这个峰会演变成阿里云开发者…

Linux的历史与环境

目录 Linux的背景介绍 Linux的时代背景-硅谷模式 计算机发展 UNIX发展历史 Linux诞生的偶然与必然 Linux开源 Linux发行版本 搭建Linux的环境 1.直接安装在物理机上 2.使用虚拟机软件 3.使用云服务器 &#xff08;1&#xff09;购买云服务器 &#xff08;2&#x…

docker是干什么的

很多朋友刚接触docker&#xff0c;不知道docker做什么&#xff0c; 这里白眉大叔给大家普及一下 docker的知识以及docker和虚拟机的区别。 你可以这样认为&#xff0c;docker 就是 打包应用程序的工具。 怎么理解这个工具呢&#xff1f; 1-如何理解docker 这个打包工具&#x…

作为一个初学者,该如何入门大模型?

在生成式 AI 盛行的当下&#xff0c;你是否被这种技术所折服&#xff0c;例如输入一段简简单单的文字&#xff0c;转眼之间&#xff0c;一幅精美的图片&#xff0c;又或者是文笔流畅的文字就展现在你的面前。 相信很多人有这种想法&#xff0c;认为生成式 AI 深不可测&#xf…

选择适合你的办公桌:提高工作效率的关键

​在如今的数字时代&#xff0c;越来越多的人将办公桌移到家里或办公室。但是&#xff0c;如何选择适合你的办公桌可能是个挑战。不同的工作需要和工作空间大小会影响你的选择。下面是一些简单的建议&#xff0c;帮助你找到适合你的办公桌&#xff0c;提高工作效率。 首先&…

世微 平均电流型降压恒流驱动器 电动摩托车LED灯小钢炮驱动IC AP5218

1&#xff0c;来源&#xff1a;深圳市世微半导体有限公司 2&#xff0c;产品描述 AP5218 是一款 PWM工作模式, 高效率、外 围简单、内置功率管&#xff0c;适用于5V&#xff5e;100V输入的高 精度降压 LED 恒流驱动芯片。输出最大功率可达 15W&#xff0c;最大电流 1.5A。AP5…

Leetcode—2512.奖励最顶尖的K名学生【中等】

2023每日刷题&#xff08;十九&#xff09; Leetcode—2512.奖励最顶尖的K名学生 哈希表stringstream排序算法思想 实现代码 class Solution { public:vector<int> topStudents(vector<string>& positive_feedback, vector<string>& negative_feed…

MySQL中如何书写update避免锁表

1. 什么是MySQL锁表&#xff1f; MySQL锁表是指在对某个数据表进行读写操作时&#xff0c;为了保证数据的一致性和完整性&#xff0c;系统会对该数据表进行锁定&#xff0c;防止其他用户对该表进行操作。 2. 为什么会出现锁表&#xff1f; 当多个用户同时对同一个数据表进行…

(附源码)基于springboot校园自媒体信息服务平台-计算机毕设 84565

springboot校园自媒体信息服务平台 目 录 摘要 1 绪论 1.1课题意义 1.2开发现状 1.3系统开发技术的特色 1.4springboot框架介绍 1.5论文结构与章节安排 2 2校园自媒体信息服务平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2…

一文搞定 Linux 中 Python 环境/版本管理

Python 的环境/版本管理实在是依托答辩&#xff0c;感觉不如 Node.js。 尤其是在 Linux 环境下&#xff0c;多数发行版的系统组件、工具依赖自带的 Python&#xff0c;折腾系统自带的 Python 环境时&#xff0c;一个搞不好就会把整个系统干掉。 同时&#xff0c;研究安全的小伙…