ST表(RMQ问题)

news2024/11/25 4:54:19

ST表能够O(1)地解决区间[l,r]之间最值问题

1.建表,首先明白ST[i][j],表示的是区间[i, i+(1<<j)-1]的最值,区间大小为2^j。首先初始化ST[i][0]=a[i]。

void init(){
    
    for(int i=1; i<=n; i++){
        ST[i][0]=a[i];
    }
}

因为ST[i][0]表示区间[i,i+(1<<0)-1],也就是[i,i],即a[i]本身。

然后建表,首先确定k=log2(区间大小),这么做的目的是确定最大的j以保证ST[i][i+(1<<j)-1]在指定的区间里面。

void build(int l, int r){
    int k = log2(r-l+1);
    init();
    for(int j=1; j<=k; j++)
        for(int i=1; i<=r-(1<<j)+1; i++){
            ST[i][j] = max(ST[i][j-1], ST[i+(1<<(j-1))][j-1]);//[i,i+(1<<j)-1]可以分为[i,i+(1<<(j-1))-1]和[i+(1<<(j-1))][j-1]两个区间大小为(1<<(j-1))的区间,运用倍增的思想赋值ST[i][j]
        }
}

可以通过下面的例子进一步理解:

下列有10个数,从序列1开始到10;第2行到第11行是ST存储的情况:注意行为j表示当前区间大小,列为i表示区间起始序号。便于理解现在改为i为行,列为j。

2.查询给定区间[l,r]的最值:

跟建表一样确定 k = log2(r-l+1), 然后从ST[l][k]和ST[r-(1<<k)+1][k], 表示的区间分别是[l,l+(1<<k)-1]和区间[r-(1<<k)+1][r]两个大小为(1<<k)的子区间,虽然两个区间可能有重复的部分但是不影响最后结果。

int find(int l, int r){
    int k = log2(r-l+1);
    return max(ST[l][k], ST[r-(1<<k)+1][k]); 
}

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

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

相关文章

如何配置防火墙?看这篇就够了

大家好&#xff0c;我是老杨。 在互联网时代&#xff0c;网络安全的问题不用多说了&#xff0c;配置防火墙是非常必要的。 在网络的世界里&#xff0c;要由防火墙过滤的就是承载通信数据的通信包。 防火墙是位于内部网和外部网之间的屏障&#xff0c;也是系统的第一道防线。…

06.数据解析-xpath

1、什么是xpath ​ XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言&#xff0c;可用来在 HTML\XML 文档中对元素和属性进行遍历。 W3School官方文档&#xff1a;http://www.w3school.com.cn/xpath/index.asp 2、认识xml 知识点&#xff1a; html和xml…

如何使用 Xunit 框架进行单元测试和集成测试

在软件开发过程中&#xff0c;测试是至关重要的一环。测试驱动开发&#xff08;Test-Driven Development&#xff0c;TDD&#xff09;是一种常用的开发方法论&#xff0c;它强调在编写代码之前先编写测试用例&#xff0c;然后通过不断迭代的方式来实现功能。为了帮助开发者更好…

解决项目报错:@org.springframework.beans.factory.annotation.Autowired(required=true)

项目使用mybatis&#xff0c;启动时报错&#xff1a; Description: Field toolsDetailsService in com.cvit.applet.controller.ToolsDetailsController required a bean of type com.cvit.applet.mapper.ToolsDetailsMapper that could not be found. The injection point has…

上门按摩小程序|同城上门按摩软件开发|上门按摩系统;

上门按摩小程序的开发具有许多优势&#xff0c;下面就给大家介绍下按摩小程序功能: 上门按摩小程序的优势 方便快捷&#xff1a;上门按摩小程序提供在线预约服务&#xff0c;用户可以通过手机随时随地预约按摩师上门服务&#xff0c;避免了传统预约方式的繁琐和不确定性。 个性…

面向对象设计-UML六种箭头含义

目录 UML概述UML语义UML表示法 六种常用关系标识方法泛化实现依赖关联聚合组合 本文参考文章 https://blog.csdn.net/qq_25091281/article/details/123801862 UML概述 UML (Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以…

Vue、js底层深入理解笔记

文章目录 1. Vue中列表组件的key值有什么作用&#xff1f;2. [1, 2, 3].map(parseInt)结果 1. Vue中列表组件的key值有什么作用&#xff1f; 这个是修改数组的情况下 还有增删的情况下 删除12&#xff0c;添加67 结果 带key的dom节点发生改变&#xff0c;内容未改变 不带key…

Linux: 基础IO

学习目标 1.C接口与系统调用接口的差别 2.文件描述符, 重定向, 一切皆文件, 缓冲区 3.fd与FILE, 系统调用和库函数的关系 4.系统中的inode 5.软硬链接 6.动静态库 预备知识 1.文件 内容 属性 2.文件的所有操作: a. 对内容的操作 b.对属性的操作 3.文件在磁盘(硬件)上, 我…

通过IP地址管理提升企业网络安全防御

在今天的数字时代&#xff0c;企业面临着越来越多的网络安全威胁。这些威胁可能来自各种来源&#xff0c;包括恶意软件、网络攻击和数据泄露。为了提高网络安全防御&#xff0c;企业需要采取一系列措施&#xff0c;其中IP地址管理是一个重要的方面 1. IP地址的基础知识 首先&a…

04训练——基于YOLO V8的自定义数据集训练——训练结果说明

YOLOv8的训练执行情况指标说明 运行YOLO V8的训练代码将会看到以下执行的情况。 在上图中,我们可以看到每一轮训练的指标情况,YOLOv8训练过程中的输出指标具体介绍如下: • Epoch: 当前的训练轮数,一轮表示所有的训练数据都被模型处理一次。例如,1/100表示第一轮训练,总…

高效截屏方法,你值得拥有!在Windows10中截屏的3种方法

本文介绍如何在Windows 10中捕获屏幕截图&#xff0c;包括使用键盘组合、使用Snipping Tool、Snipp&Sketch Tool或Windows游戏栏。 使用WindowsPrtSc组合键截图 在Windows 10中捕获屏幕截图的最简单方法是按下键盘上的PrtScWindows键盘组合。你将看到屏幕短暂闪烁&#x…

微信小程序发布流程

前言 上周写了如何写一个小程序&#xff0c;然后经过查资料&#xff0c;改bug&#xff0c;找chatgpt美化页面&#xff0c;我写了一个计算代谢率的小工具&#xff0c;写完了之后该怎么办呢&#xff0c;当然是发布上架&#xff0c;然后我就开始了发布的折腾 提交代码 这一步很…

线性表相关知识

1.简述 线性表&#xff0c;全名为线性存储结构。使用线性表存储数据的方式可以这样理解&#xff0c;即“把所有数据按照顺序&#xff08;线性&#xff09;的存储结构方式&#xff0c;存储在物理空间”。 按照空间分类&#xff1a; 顺序存储结构&#xff1a;数据依次存储在连续…

可爱的回调函数

目录 一、作者声明&#xff1a; 二、什么回调函数&#xff1f; 三、库函数qsort为例&#xff0c;讲解回调函数 一、作者声明&#xff1a; 标题中的可爱纯纯是用来凑字数&#xff0c;没有特殊含义&#xff0c;因为可爱的平台不让用四个字作为标题&#xff01; 如果平台允许我…

上海未来产业创投联盟启动成立,和鲸Heywhale成为首批发起单位

第三届“海聚英才”全球创新创业峰会于近期举办&#xff0c;会上正式启动成立“上海未来产业创投联盟”&#xff0c;上海和今信息科技有限公司等 31 家单位成为首批发起单位。 为进一步坚定产业投资信心&#xff0c;营造最优人才生态&#xff0c;9月20日下午&#xff0c;第三届…

mstp vrrp bfd 实验

LSW1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sys lsw1 [lsw1]vlan batch 10 20 30 [lsw1]int g0/0/1 [lsw1-GigabitEthernet0/0/1]port link-type access [lsw1-GigabitEthernet0/0/1]port default vlan 10 [lsw1-GigabitEthernet0…

ELK集群 日志中心集群

ES&#xff1a;用来日志存储 Logstash:用来日志的搜集&#xff0c;进行日志格式转换并且传送给别人&#xff08;转发&#xff09; Kibana:主要用于日志的展示和分析 kafka Filebeat:搜集文件数据 es-1 本地解析 vi /etc/hosts scp /etc/hosts es-2:/etc/hosts scp /etc…

铁路防护网RFID锁控,实现铁路防护网智能防盗防破坏

一、铁路防护网的挑战与需求 铁路防护网作为铁路运输系统中的重要组成部分&#xff0c;面临着安全性和防盗防破坏的挑战&#xff0c;传统的锁控系统存在以下问题&#xff1a; 1、安全隐患难以发现&#xff1a;传统锁控系统无法及时发现锁被剪断或破坏的情况&#xff0c;容易造…

【SpringCloud】Eureka原理分析、搭建Eureka服务、服务注册、服务发现

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 eureka 一、Eureka原理分析1.1 服务调用出现…

【项目开发 | C语言项目 | 贪吃蛇】

项目简单介绍 本项目是一个命令行版的贪吃蛇游戏。用户需要控制一个蛇在屏幕上移动&#xff0c;吃食物来增长&#xff0c;同时避免撞到边界和自己的身体。 一&#xff0c;开发环境需求 操作系统 &#xff1a;Windows 开发环境工具 &#xff1a;Qt, VSCode, Visual Studio 技…