【蓝桥杯】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 lca(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<<lca(x, y)<<'\n';}return 0;
}

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

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

相关文章

论文解读—— 基于边缘梯度方向插值和 Zernike 矩的亚像素边缘检测

论文&#xff1a;《 Subpixel edge detection based on edge gradient directional interpolation and Zernike moment》 地址&#xff1a; http://www.dpi-proceedings.com/index.php/dtcse/article/view/24488 摘要 在本文中&#xff0c;我们提出了一种基于边缘梯度方向插值…

PowerShell 一键更改远程桌面端口

前言 提高工作效率,安全性和规范化,最终实现一键更改Windows 远程桌面端口 前提条件 开启wmi,配置网卡,参考 一键更改远程桌面端口自动化脚本 默认端口3389变更后的端口3390win+r mstsc YOU_ip常规更改的连接方式win+r mstsc YOU_ip:3390需要恢复到原来的端口3390更改成3…

【java】java环境变量分类

测试代码&#xff1a; public class TestSys {public static void main(String[] args) {/*** 获取所有的系统环境变量*/Map<String, String> map System.getenv();map.forEach((key, value) -> System.out.printf("env&#xff1a;key:%s->value:%s%n"…

CPU的Cache和MESI协议

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第20篇&#xff0c;在这里分享给大家&#xff0c;这篇文章讲CPU的Cache和MESI协议。 为什么需要高速缓存&#xff1f; 通过图片可以清晰的看到&#xff0c;随着时间的发展CPU的性能差距和内存越来越大&#…

使用光标精灵更换电脑鼠标光标样式,一键安装使用

想要让自己在使用电脑时更具个性化&#xff0c;让工作和娱乐更加愉快&#xff0c;改变你的电脑指针光标皮肤可能是一个简单而有效的方法。很多人或许并不清楚如何轻松地调整电脑光标样式&#xff0c;下面我就来分享一种简单的方法。 电脑光标在系统里通常只有几种默认图案&…

SpringBoot项目通过触发器调度实现定时任务

文章目录 前言一、quartz是什么&#xff1f;二、quartz中核心概念三、集成步骤1.引入依赖2.demo样例a.定义一个任务参数实体类b.定义操作触发器、定时任务接口及实现c.作业实现d.结果截图 四、其他1.QuartzJobBean和Job区别2.注意事项3.作业&#xff08;Job&#xff09;和触发器…

飞腾D2000+复旦微 ARM+FPGA+预装麒麟 全国产化COMe模块

产品概述 COMe-D2000核心模块满足PICMG COM Express Type-6 Rev2.1标准规范&#xff0c;遵从COMe BASIC尺寸标准&#xff0c;采用加固设计方案&#xff0c;内存和SSD存储均采用板贴方式&#xff0c;增强了可靠性&#xff0c;体积也得到良好控制。COMe-F662采用国产飞腾腾锐D200…

黑马程序员——javase进阶——day11——字符流,编码表,对象流,其他流

目录&#xff1a; 编码表 思考编码表介绍编码表小结字节流读中文出现码的原码字符输出流 字符流输出介绍FileWriter的成员FileWriter写数据的步骤字符输出流练习字符输入流 字节输入流介绍FileReader的成员字符缓冲流 字符缓冲流字符缓冲流特有的功能字符缓冲流练习转换流 转换…

IO多分复用

#include<myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.65.131" //服务器IPint main(int argc, const char *argv[]) {//1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0); //参数1&#xff1a;…

MyBatis是纸老虎吗?(四)

在《MyBatis是纸老虎吗&#xff1f;&#xff08;三&#xff09;》这篇文章中我们一起梳理了MyBatis配置文件的解析流程&#xff0c;并详细介绍了其中的一些常见节点的解析步骤。通过梳理&#xff0c;我们弄清楚了MyBatis配置文件中的一些常用配置项与Java Bean之间的对应关系&a…

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention电能质量扰动识别模型

往期精彩内容&#xff1a; 电能质量扰动信号数据介绍与分类-Python实现-CSDN博客 Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(三)基于Transformer…

AI浸入社交领域,泛娱乐APP如何抓住新风口?

2023年是大模型技术蓬勃发展的一年&#xff0c;自ChatGPT以惊艳姿态亮相以来&#xff0c;同年年底多模态大模型技术在国内及全球范围内的全面爆发&#xff0c;即模型能够理解并生成包括文本、图像、视频、音频等多种类型的内容。例如&#xff0c;基于大模型的文本到图像生成工具…

实战纪实 | 从接口信息泄露到RCE

打点 开局一个登录框 信息收集 发现了一处接口泄露了部分信息 不过只有支付宝密钥的信息无法扩大危害&#xff0c;此时尝试寻找了一下其他同类型系统同样的接口&#xff0c;查看一下是否泄露的信息相同 因为如果相同就说明是静态的&#xff0c;没有价值 横向收集 此时访问其…

后端系统开发之——接口参数校验

今天难得双更&#xff0c;大家点个关注捧个场 原文地址&#xff1a;后端系统开发之——接口参数校验 - Pleasure的博客 下面是正文内容&#xff1a; 前言 在上一篇文章中提到了接口的开发&#xff0c;虽然是完成了&#xff0c;但还是缺少一些细节——传入参数的校验。 即用户…

JMeter 并发测试和持续性压测详解

并发测试和持续性压测都是评估系统性能的常用方法&#xff0c;它们可以帮助开发人员发现并解决系统中的性能问题。本文来详细介绍下。 概念 并发测试&#xff1a; 旨在评估系统在同时处理多个用户请求时的性能。在这种 测试 中&#xff0c;系统会暴露于一定数量的用户负载下&…

【双指针】算法例题

目录 二、双指针 25. 验证回文数 ① 26. 判断子序列 ① 27. 两数之和II - 输入有序数组 ② 28. 盛最多水的容器 ② 29. 三数之和 ② 二、双指针 25. 验证回文数 ① 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一…

行业回暖?这个行业岗位需求飙升6倍!程序员们提前恭喜了!

前言 随着今年史上最长春节假期正式收官&#xff0c;各行各业相继进入开工节奏&#xff0c;就业市场开启持续升温模式。 今年开工首周&#xff0c;人才需求增长明显&#xff0c;求职者活跃度大大增多&#xff0c;就业市场进入了繁忙有序的节奏&#xff0c;呈现出春招市场的勃…

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…

在window命令行中,使用conda创建新的虚拟环境时出现的问题以及解决办法

一.出现的问题 C:\Users\zhu>conda create -n ML python3.8 Collecting package metadata (current_repodata.json): failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/current_repodata.js…

南京大学AI考研,宣布改考408!

官网还没通知 附上南大与同层次学校近四年的分数线对比&#xff0c;整体很难 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 如果确定要冲南大的话建议提早调整自己的复习路线&…