RMQ问题 —— Sparse-Table算法

MTK眼中6G物理层与无线协议的进化之路 提议统一波束和小区级的测量、报告和切换框架/流程,进一步减少移动性切换过程中的中断,采用可扩展框架/流程,允许在不同移动性场景中进行部分用户设备配置更新以实现快速切换,支持用户设备发起的移动性(同步/切换)以降低延迟和因信令交换导致的失败,设计移动性RS以实现空闲状态下的节能和连接状态下的无缝用户体验,实现5G/6G间的无缝互操作移动性,为固定无线接入(FWA)提供潜在增强,构建统一的跨层移动性框架以降低复杂度、减少中断和失败。为适应多样化的流量类型,需要灵活的帧结构和高层时间对齐。 阅读详情
RMQ引子:

  我们都知道求一个数组的最小值,可以用很朴素的O(n)级别的算法来求解。

  那么,如果现在是求一个数组的任意连续子数组的最小值呢?假设询问Q次,那么总的时间复杂度为O(Q*n),时间开销很高!这就是今天所要介绍的RMQ问题(Range Minimum Query)。

  然而,如果使用一些分治的思想,可以大大简化时间复杂度。

Sparse-table算法:

  我们在求一个区间的最小值时,可以把问题一分为二,求左半边数组的最小值MINleft,右半边数组的最小值MINright,然后求二者的最小值即可!

MINleft和MINright怎么求呢?同样用刚才分而治之的思想,继续分下去。最后,一定可以分到数组仅有一个元素的朴素情况。

  我们定义dp[i][j]为:以下标i开头,长度为2j的数组的最小值,则:

  dp[i][j] = min(dp[i][j-1], dp[i+2j-1][j-1])

适用情形:

sparse-table适用于:

  1. 只需要查询区间最大/小值

  2. 但是,不需要对数组进行修改的问题

#include <cstdio>
#include <iostream>

using namespace std;

const int MAXN = 1024;
const int MAXK = 10;
int d[MAXN][MAXK];
int n;

void build()
{
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        scanf("%d", &d[i][0]);
    }
    for(int j = 1; (1 << j) <= n; j++) { 
        for(int i = 0; i + (1 << j) - 1 < n; i++) {
            d[i][j] = min(d[i][j - 1], d[i + (1 << j - 1)][j - 1]);
        }
    }
}

int query(int l, int r) 
{
    int w = r - l + 1;
    int x = 0;
    while((1 << (x+1)) <= w)    ++x;  // 找到最大的不超过w的2x
    return min(d[l][x], d[r-(1<<x)+1][x]);
}

int main ()
{
    build();
    int l, r;
    while(cin >> l >> r) {
        cout << query(l, r) << endl;
    }
    return 0;    
} 

 

算法竞赛推荐书单 前言 入坑算法竞赛已经一年半了,在这期间也读了不少关于算法竞赛的书,这些书对我的帮助还是蛮大的。平时看题解多是个人零散的题解,很难以系统的去学习,认认真真的挑选1-2本书来阅读,无论是从思维能力还是文字表达能力都会得到提升,以下都是我自己读过的书进行一下分享,难度由浅入深,部分书籍浅尝而止。 入门:《啊哈!算法》 适合:总题量150以下初步掌握C语言的萌新 一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松 阅读详情

相关推荐

AI算力网络与通信领域流量分析:优化策略探讨_副本

今天的AI就像一个"超级吃货",每天要"吃"掉海量数据、“消耗"巨量算力——训练一个千亿参数的大模型,可能需要上万块GPU同时工作数周,其间产生的数据传输量足以填满数百万个1TB硬盘。这些GPU和计算节点通过网络连接形成"AI算力网络”,而数据在节点间的流动就是"通信流量"。如果把算力比作AI的"肌肉",那流量就是"血液"——血液不通畅,肌肉再强也使不上劲。

AI天才研究院 1197

【算法模板】 RMQ问题,使用Sparse-Table,手写留念~

额,大一暑假写的RMQ,还是比较干净的,翻出来存起来以后备用。     #include &quot;bits/stdc++.h&quot; using namespace std; #define inf 10009 #define INF 999999999 //Sparse-Table 学习手敲:求区间最小值,nlogn预处理,1查询,不可动态维护 //ST是一个打表的递推式 ,用2的k次来拓展 //d...

Hide_in_Code 331

逆向实战:我是如何一步步解开美团外卖App的mtgsig3.0签名(附关键代码片段)

本文详细记录了逆向分析美团外卖App的mtgsig3.0签名算法的全过程,从抓包到算法还原,包括Java层和Native层的深度分析。通过Frida、IDA Pro等工具,揭示了签名生成的多层加密流程,并提供了关键代码片段。文章还探讨了逆向工程中的反调试对抗和签名时效性问题,为安全研究人员提供了宝贵的技术参考。

weixin_42530732的博客 860

【学习笔记】RMQ问题与Sparse Table算法

RMQ问题 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值。 ST算法 ST(Sparse Table,稀疏表,ST表)是用来解决RMQ问题的一种算法,预处理复杂度O(nlogn),查询复杂度O(1),不支持在线查询。 构造 ST表的构...

秋叶红于二月花 673

STM32H750VBT6在Keil5下载报错?三步搞定Flash Download Failed Cortex-M7问题

本文针对STM32H750VBT6在Keil5开发环境中常见的“Flash Download Failed Cortex-M7”下载报错问题,提供了系统性的三步解决方案。核心在于理解该芯片128KB内部Flash的特殊性,并详细指导用户检查更新Device Pack、精确配置Flash下载算法地址(0x08000000, 0x20000)以及进行硬件连接验证,从而快速修复调试器与芯片间的Flash操作协议问题。

weixin_29274969的博客 480

基于立创EDA的IP5389BZ+IP6829 100W有线15W无线带屏充电宝DIY全流程解析

本文详细解析了基于立创EDA平台,采用IP5389BZ和IP6829芯片DIY一款100W有线快充、15W无线充电并带显示屏的移动电源的全过程。内容涵盖核心功能规划、硬件选型、电路设计、PCB布局、焊接组装、分步调试以及软件逻辑,为电子爱好者提供了一份从原理到实践的完整指南,并重点强调了电池安全与IP6829供电电压等关键注意事项。

weixin_34374684的博客 304

RMQ问题(Sparse-Table算法)

  范围最值问题(Range Minimum/maximum Query,RMQ)。给出一个哪个元素的数组A1,A2,...An,要求设计一个数据结构,支持查询操作:计算min(AL,AL+1,...,AR)或者max(AL,AL+1,...,AR)。每次都用一个循环来计算显然不够快,这里介绍Tarjan的Sparse-Table算法,它的预处理时间是O(nlogn),查询时间是O(1)...

aisebu7819的博客 189

Polyworks脚本开发学习笔记(一)-脚本开发环境

详细的总结和记录了利用Polyworks进行脚本开发的一些方法和心得

qq_43662503的博客 6796

RMQ算法之Sparse Table算法

目标算法:Sparse Table算法 应用范围:RMQ #include #include #include #include using namespace std; const int maxn = 50005; int dpmax[maxn][20]; int dpmin[maxn][20]; int a[maxn]; int n,m; void InitRmq() {

Tristeza的博客 546

Unity3d移动端性能优化

以下条目主要针对移动端,大部分也适合PC端 一、Profiler的使用 1.性能优化应贯穿项目开发的全过程,如需求(性能能不能达到要求)、设计、开发、测试等。不能开发结束才优化性能。 2.官方推荐的优化工具是【Window】-&gt;【Profiler】 3.确认瓶颈是CPU-bound(Gfx.WaitForCommands)还是CPU-bound(Gfx.WaitForPresent) 4.内存分析使用Memory Profiler 二、内存优作 5.减少内存收集的影...

zouxin_88的专栏 3055

十分钟搞定! DeepSeek本地部署详细指南!

保姆级教程,三步搞定deepseek本地部署,不求人!

一个喜欢诗和远方的程序媛 4345

RMQ问题之Sparse_Table算法

RMQ问题,全名(Range Minimum/Maximum Query),是求给定区间中的最值问题。 主要方法及复杂度如下: 1、朴素(即搜索),O(n)-O(qn) online。 2、线段树,O(n)-O(qlogn) online。 3、Sparse_Table(实质是动态规划),O(nlogn)-O(1) online。 4、RMQ标准算法:先规约成LCA(Lowest Com...

爱.NET 205

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Sparse-Table算法———RMQ问题

void RMQ_init(const vector&lt;int&gt;&amp; A) { int n = (int)A.size(); for(int i=0;i&lt;n;i++) d[i][0]=A[i]; for(int j=1;(1&lt;&lt;j)&lt;=n;j++) { for(int i=0;i+(1&lt;&lt;j)-1&...

SongyangJi 371

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RMQ问题的Sparse-Table算法

范围最小值问题(Range Minimum Query) 给出一个n个元素的数组,设计数据结构使得支持查询操作Query(L,R) 计算[L,R]中最小值 Tarjan的Sparse-Table算法预处理时间为O(nlogn) 查询只需要O(1)而且常数很小。假设dp[i][j]表示从第i个数开始的2^j个数的最小值。 有下列公式:dp[i][j] = min(dp[i,j-1],dp[i+2

Bill_Utada的成长之路 1217

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Data Structure】RMQ问题的Sparse-Table算法

有这样一种问题:有一个数列a1,a2,.

编程小弱 433

RMQ 问题之Sparse_Table算法

RMQ问题,全名(Range Minimum/Maximum Query),是求给定区间中的最值问题。 主要方法及复杂度如下: 1、朴素(即搜索),O(n)-O(qn) online。 2、线段树,O(n)-O(qlogn) online。 3、Sparse_Table(实质是动态规划),O(nlogn)-O(1) online。 4、RMQ标准算法:先规约成LCA(Lowest C

herongwei 的 BLOG 1178

poj 3264 区间最大最小值 RMQ问题之Sparse_Table算法

Balanced Lineup Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description For the daily milking, Far...

weixin_30810239的博客 154

RMQ问题详解 --Sparse-Table算法实现和线段树实现

RMQ:范围最小值问题 给出有n个元素的数组a1,a2,…,an.设计一个数据结构支持多次查询Query(L,R):计算min(aL,aL+1,…,aR).Sparse-Table算法: 令d[i][j]表示下标从i开始长度为2^j的一段元素中的最小值。所以我们可以得到递推公式: d[i][j]=min(d[i][j-1],d[i+2^j-1][j-1]).可以看出d[i][j]可以有他前面的

STILLxjy 713

RMQ问题之Sparse-Table算法

用Sparse-Table算法解RMQ问题,能用O(nlogn)的时间预处理,而查询只需要O(1)。

_____ 699

ST(Sparse Table)算法求解RMQ问题

RMQ问题即求解区间最值问题,今天学习一下如何是有ST算法求解RMQ问题。 ST算法可以在O(nlogn)的预处理以后实现O(1)的查询效率,从而解决查询次数较多的RMQ问题。 首先,是预处理。预处理采取的思想是动态规划,我们用f[i][j]表示表示区间[i,]的最值

SwordEnd 294

RMQ问题——sparse-table算法

RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题 sparse table算法为一种dp算法。

G_congratulation的博客 740

Sparse Table算法 - RMQ问题的简单高效算法

Sparse Table算法是用来解决一类RMQ问题的O(nlog2n)的算法,而且代码非常好写,在本质上是一个动态规划,写起来其实也就是几十行。那么在这里的RMQ问题是什么呢?RMQ问题,中文名应该是范围(区间)最(小)值问题,简单描述一下,就是先给出一个序列,然后不断求若干个区间中的一个最值。比如说最小值,最大值之类。像堆那样的数据结构能解决的问题是整个序列的最值问题,而RMQ问题则是序列一段

算法的设计与应用研究 703

RMQ问题,加深对ST算法的理解(Sparse Table)

Sparse Table(稀疏表):简称ST ST 算法是基于动态规划的算法,所以它本质就是动态规划。 它的时间复杂度为:O(nlogn)-O(q)。 它 适宜用 于数据不再作出变化 的区间最值 查询问题。 现在假设有一组数据,要求[l,r]内的最小值。 首先我们知道: 对于区间[l,r]:它的区间长度len = r-l+1; 下面将ST的基本思想: 它是基于动态规划,最佳状态为:dp[i]...

tb_youth的博客 299
上一篇: POJ - 3468 - A Simple Problem with Integers 【线段树 区间修改】
下一篇: UVA - 11235 —— Frequent values 【RMQ】
AcIsFun
博客等级 码龄10年 1粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值