【蓝桥杯】RMQ(Range Minimum/Maximum Query)

一.概述

RMQ问题,是求区间最大值或最小值,即范围最值问题。

暴力解法是对每个询问区间循环求解,设区间长度n,询问次数m,则复杂度是O ( nm )。

一般还可以使用线段树求解,复杂度是O(mlogn)。

但还有一种更简便的ST算法,预处理复杂度是O(nlogn),查询O(1)。

二.ST(Sparse Table)算法

它适用于静态空间的RMQ查询。

给定长度为n的静态数列,做m次询问,每次给定L,R \leq n,查询区间[L,R]内的最值。

原理:一个大区间若能被两个小区间覆盖,那么大区间的最值等于两个小区间的最值。(小区间有重合不影响结果)

基本思路:

1)把整个数列划分为很多小区间,并提前计算出每个小区间的最值。

按照倍增分成小区间。

每组小区间的最值,都可以从前一组递推得来。 

2 \times x\geq len设dp[i][j]表示第i处开始的2^j个数字的最值,i是开始位置,j是延伸长度,dp[i][0]是原数组a[i]本身,即边界。

状态转移方程:dp[i][j]=min(dp[i][j-1],dp[i+2^{j-1}][j-1])

这里其实就是把一个区间划分为了两个小区间,通过小区间获得最值。

计算出所有小区间的最值,复杂度为:每一组都需要计算n次,一共有log_2n

时间复杂度为:O(nlogn)

2)对任意一个区间最值查询,找到覆盖它的两个小区间,用两个小区间的最值计算。

以任意元素为起点,有长度为1、2、4、……的小区间,以任意元素为终点,也有长度为1、2、4、……的小区间。

可以将待查询区间[L,R]分为两个小区间,让这两个小区间覆盖[L,R]。一次查询的时间复杂度为:O(1)。

区间长度为len=R-L+1

2 \times x \geq len,小区间的长度为x。

三.实战演练

//ST算法 区间最大值
#include <iostream>
#include <algorithm>using namespace std;const int N=5e5+10;
long long dp[N][20];
int n,q;long long st(int l,int r){int x=0;while(l+(1<<(x+1))<=r){x++;}return max(dp[l][x],dp[r-(1<<x)+1][x]);
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>q;//构造dp数组for(int i=1;i<=n;i++){cin>>dp[i][0];}for(int j=1;j<20;j++){for(int i=1;i+(1<<j)-1<=n;i++){dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);}}for(int i=0;i<q;i++){int x,y;cin>>x>>y;cout<<st(x, y)<<'\n';}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgresql数据库入门简介

Postgresql入门 1.Postgresql数据库简介 PostgresQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进&#xff0c;PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSql可以运行在所有主流操作系统上&#xff0c;包括Linux…

会员项目定价卡css3特效

会员项目定价卡css3特效&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 会员项目定价卡css3特效代码

【爬虫】web自动化和接口自动化

专栏文章索引&#xff1a;爬虫 目录 一、介绍 二、推荐 1.接口自动化 2.Web自动化 一、介绍 爬虫技术一般可以分为两种类型&#xff1a;接口自动化和web自动化。下面是它们的简要介绍&#xff1a; 1.接口自动化 接口自动化技术的主要目的是通过模拟HTTP请求来实现自动化…

Zama:链上隐私新标准

1. 引言 揭示 Web3 中全同态加密的潜在用例&#xff0c;并深入研究 Zama 的四种主要开源产品&#xff1a; TFHE-rsConcreteConcrete MLfhEVM 众所周知&#xff0c;在当今时代&#xff0c;数据隐私问题与互联网诞生以来一样普遍。仅 Yahoo!、Equifax 和 Marriott 的数据泄露就…

java动态规划学习笔记

学习笔记目录&#xff0c;这里记录个大纲&#xff0c;详情点链接 背包问题 01背包问题综述 01背包问题&#xff08;二维数组&#xff09;https://blog.csdn.net/m0_73065928/article/details/136794406?spm1001.2014.3001.5501 01背包问题&#xff08;滚动数组&#xff09…

LeetCode 热题 100 | 堆(一)

目录 1 什么是堆排序 1.1 什么是堆 1.2 如何构建堆 1.3 举例说明 2 215. 数组中的第 K 个最大元素 2.1 子树大根化 2.2 遍历所有子树 2.3 弹出栈顶元素 2.4 完整代码 菜鸟做题&#xff0c;语言是 C 1 什么是堆排序 1.1 什么是堆 堆的定义和分类&#xff…

ECharts5 概念篇1

图表容器及大小 初始化 在 HTML 中定义有宽度和高度的父容器&#xff08;推荐&#xff09; 通常来说&#xff0c;需要在 HTML 中先定义一个 <div> 节点&#xff0c;并且通过 CSS 使得该节点具有宽度和高度。初始化的时候&#xff0c;传入该节点&#xff0c;图表的大小默认…

海外客户获取难?海外云手机助力电商引流!

海外电商面临的市场竞争激烈&#xff0c;如何在海外市场获客成为了摆在许多卖家面前的难题。而在这个问题的解决方案中&#xff0c;海外云手机崭露头角&#xff0c;成为助力电商引流的新利器。 在当前市场中&#xff0c;云手机主要用于游戏挂机&#xff0c;但其潜力在海外电商领…

四、C语言中的数组:如何输入与输出二维数组(数组,完)

本章的学习内容如下 四、C语言中的数组&#xff1a;数组的创建与初始化四、C语言中的数组&#xff1a;数组的输入与元素个数C语言—第6次作业—十道代码题掌握一维数组四、C语言中的数组&#xff1a;二维数组 1.二维数组的输入与输出 当我们输入一维数组时需要一个循环来遍历…

AWS监控,AWS 性能监控工具

监控云部署的性能是 IT 环境正常运行的内在条件。AWS 云是一个架构良好的框架&#xff0c;管理员可以使用专用的AWS 性能监控工具增强服务的功能。执行AWS监视是为了跟踪在AWS环境中积极运行的应用程序工作负载和资源。AWS监视器跟踪各种AWS云指标&#xff0c;以帮助提高在其上…

刷题DAY30 | LeetCode 332-重新安排行程 51-N皇后 37-解数独

332 重新安排行程&#xff08;hard&#xff09; 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&…

机器学习知识点复习 下(保研、复试、面试)百面机器学习笔记

机器学习知识点复习下 第八章、采样1.采样的作用 第九章、前向神经网络1.多层感知机与布尔函数2.神经网络中的激活函数3.多层感知机的反向传播算法4.神经网络训练技巧5.深度卷积神经网络6.深度残差网络 第十章、循环神经网络1.循环神经网络和卷积神经网络2.循环神经网络的梯度消…

【前端Vue】Vue3+Pinia小兔鲜电商项目第2篇:什么是pinia,1. 创建空Vue项目【附代码文档】

全套笔记资料代码移步&#xff1a; 前往gitee仓库查看 感兴趣的小伙伴可以自取哦&#xff0c;欢迎大家点赞转发~ 全套教程部分目录&#xff1a; 部分文件图片&#xff1a; 什么是pinia Pinia 是 Vue 的专属状态管理库&#xff0c;可以实现跨组件或页面共享状态&#xff0c;是…

数字电源浅析

电力电子技术是关于能量转换、调节、控制和管理等方面的学科,而数字电源则是电力电子技术的一种应用,是利用数字电路技术实现电源控制和管理的新型电源。 一、什么是数字电源 数字电源是一种数字控制的电源设备,可以通过数字控制芯片(DSP、MCU等)实现输出电压、电流、功…

TypeScript在学习(0)

1.什么是TypeScript? 答:TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff0c;而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 个人浅见&#xff0c;我一直把ts简单理解成&#xff0c;其实就是javascript上多了…

插入排序+希尔排序

目录 插入排序&#xff1a; 希尔排序&#xff1a; 插入排序&#xff1a; 注意这里不要将插入排序和冒泡排序弄混&#xff1a; 插入排序是将数据不断放入前一个有序数列&#xff1a; // 插入排序 void InsertSort(int* a, int n) {for (int j 1; j < n; j){for (int i j;…

【嵌入式硬件】步进电机

1.步进电机简介 1.1步进电机基本原理 步进电机的英文是stepping motor。step的中文意思是行走、迈步。所以仅从字面上我们就可以得知,步进电机就是一步一步移动的电动机。说的官方一点儿,步进电机是一种将电脉冲信号转换成相应角位移或者线位移的电动机(直线电机)。下图为…

什么是物联网远程模块

在数字化和信息化的浪潮下&#xff0c;物联网技术正在以惊人的速度改变着我们的生活和生产方式。物联网远程模块&#xff0c;作为物联网技术的核心组件之一&#xff0c;正引领着这场变革。HiWoo Box就是这样一款出色的物联网远程模块&#xff0c;它通过支持远程透传、远程锁机、…

Flink GateWay、HiveServer2 和 hive on spark

Flink SQL Gateway简介 从官网的资料可以知道Flink SQL Gateway是一个服务&#xff0c;这个服务支持多个客户端并发的从远程提交任务。Flink SQL Gateway使任务的提交、元数据的查询、在线数据分析变得更简单。 Flink SQL Gateway的架构如下图&#xff0c;它由插件化的Endpoi…

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新&#xff0c;让我们感叹从没有像今天这样&#xff0c;离人工智能的未来如此之近。 追逐AI原生&#xff1f;企业组织基于并利用大模型技术探索和开发AI应用的无限可能&#xff0c;迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…