序列分块。设块长为 \(B\)。每块预处理出最大值。对于询问 \([l, r]\),答案就是整块最大值和散块最大值拼起来。答案显然是 \(O(n) \sim O(\dfrac{n}{B} + B)\)。这是普通分块。

我们预处理出每个散块的前缀最大值和后缀最大值。预处理线性。对于跨越两个块的询问就是 \(O(\dfrac{n}{B})\)。但是缺点是对于左右端点在一个块内的询问不好处理,复杂度为 \(O(B)\)。根号平衡后还是 \(O(n) \sim O(\sqrt n)\)。

我们开一个数组 \(m_{l, r}\),表示第 \(l\) 个块到第 \(r\) 个块中最大值的最大值。这个数组显然可以很容易的 \(O\left(\left(\dfrac{n}{B}\right)^2 \right)\) 求出。接下来我们预处理所有长度为 \(O(B)\) 的段的最大值。用单调队列也很容易做到 \(O(nB)\)。这样对于左右端点在同一个块内的询问,其长度一定小于 \(B\)。我们可以直接查表。对于跨越多个块的情况,可以查一下 \(m\) 数组。这样复杂度是 \(O\left(\left(\dfrac{n}{B}\right)^2 + nB + n\right) \sim O(1)\) 的。根号平衡一下发现当 \(B = n ^ {1 / 3}\) 的时候有最小值 \(O(n ^ {4 / 3}) \sim O(1)\)。

这似乎是根号算法的极限?

我们考虑 \(\log\) 算法。首先是众所周知的 ST 表。复杂度 \(O(n \log n) \sim O(1)\) ,全方位吊打分块TNT。

我们考虑优化这个算法。考虑分块。不妨还设块长为 \(B\)。散块还是求出前后缀的 \(\max\),整块之间做一下 ST 表。跨越多块的做法可以做到 \(O(\dfrac{n}{B} \log \dfrac{n}{B}) \sim O(1)\)。对于单块之间的询问我们沿袭上面分块的思路,直接预处理所有长度为 \(B\) 的区间的 \(\max\),这样就可以直接查表。所以复杂度就是 \(O(\dfrac{n}{B} \log \dfrac{n}{B} + nB) \sim O(1)\)。根号平衡一下发现当 \(B = \sqrt{\log n}\) 的时候就可以达到 \(O(n \sqrt{\log n}) \sim O(1)\)。这比传统意义上的 ST 表要快了。\(\color{red}{(1)}\)

考虑继续优化这个算法。我们发现瓶颈在处理左右端点在同一块内的答案。在每块内再做一遍 ST 表。这样就需要 \(O(\dfrac{n}{B} \times B \log B) = O(n \log B)\) 的时间。剩下的算法和原来一样。预处理就变成了 \(O(\dfrac{n}{B} \log \dfrac{n}{B} + n \log B)\) 了。我们让 \(B = \log n\) 的时候就已经做到了 \(O(n \log \log n) \sim O(1)\) 了。当然块长显然可以比这个优秀,但是我不会求了。\(\color{orange}{(2)}\)

这个做法不是很好。我认为做法 \(\color{red}{(1)}\) 虽然渐进复杂度更劣但是完全有实力吊打做法 \(\color{orange}{(2)}\)。

如何正确使用 RMQ的更多相关文章

  1. 奶牛排序——RMQ

    [问题描述]奶牛在熊大妈的带领下排成了一条直队.显然,不同的奶牛身高不一定相同……现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛 A 是最矮的,最右边的 B 是最高的,且 B 高于 A ...

  2. Noip模拟50 2021.9.10

    已经好长时间没有考试不挂分的良好体验了... T1 第零题 开场数据结构,真爽 对于这道题首先要理解对于一条链从上向下和从下向上走复活次数相等 (这可能需要晚上躺在被窝里面脑摸几种情况的样例) 然后就 ...

  3. HDU2459 后缀数组+RMQ

    题目大意: 在原串中找到一个拥有连续相同子串最多的那个子串 比如dababababc中的abababab有4个连续的ab,是最多的 如果有同样多的输出字典序最小的那个 这里用后缀数组解决问题: 枚举连 ...

  4. RMQ(ST算法)

    RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i ...

  5. UVa 12299 RMQ with Shifts(移位RMQ)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New ...

  6. HDU 3183 A Magic Lamp(二维RMQ)

    第一种做法是贪心做法,只要前面的数比后面的大就把他删掉,这种做法是正确的,也比较好理解,这里就不说了,我比较想说一下ST算法,RMQ的应用 主要是返回数组的下标,RMQ要改成<=(这里是个坑点, ...

  7. 【算法】RMQ LCA 讲课杂记

    4月4日,应学弟要求去了次学校给小同学们讲了一堂课,其实讲的挺内容挺杂的,但是目的是引出LCA算法. 现在整理一下当天讲课的主要内容: 开始并没有直接引出LCA问题,而是讲了RMQ(Range Min ...

  8. 洛谷 P4137 Rmq Problem /mex 解题报告

    P4137 Rmq Problem /mex 题意 给一个长为\(n(\le 10^5)\)的数列\(\{a\}\),有\(m(\le 10^5)\)个询问,每次询问区间的\(mex\) 可以莫队然后 ...

  9. 【BZOJ4556】[Tjoi2016&Heoi2016]字符串 后缀数组+二分+主席树+RMQ

    [BZOJ4556][Tjoi2016&Heoi2016]字符串 Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一 ...

  10. 【bzoj1067】[SCOI2007]降雨量 倍增RMQ

    题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和200 ...

随机推荐

  1. 【赵渝强老师】史上最详细的PostgreSQL体系架构介绍

    PostgreSQL是最像Oracle的开源数据库,我们可以拿Oracle来比较学习它的体系结构,比较容易理解.PostgreSQL的主要结构如下: 一.存储结构 PG数据存储结构分为:逻辑存储结构和 ...

  2. USB type-c CC管脚如何做到正反接检测功能

    USB Type-C 连接器的 CC (Configuration Channel) 管脚用于实现插头方向检测和电源管理.具体来说,USB Type-C 连接器具有两个 CC 管脚:CC1 和 CC2 ...

  3. 使用 ref 获取另外组件的数据

  4. 谈谈你对 vue 的理解

    vue 是创建用户界面的 js 框架 ,是创建 spa 应用的框架 :使用 mvvm 模式,数据驱动视图模型 ,业务逻辑和页面解构分离开发:使用高效的 diff 算法渲染页面结构 : 采用组件化模式, ...

  5. 000 通过 Pytorch 实现 Transformer 框架完整代码(带注释)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  6. Kali Linux 各版本开启ssh 服务

    Kali Linux 各版本开启ssh 服务 2019版kali Linux SSH链接办法 修改kali关于SSH服务默认配置并重启SSH服务,步骤如下: 打开sshd_config文件 leafp ...

  7. Docker挂载jar包运行脚本

    下载镜像 docker pull openjdk:8 执行命令 docker run -d -p 9001:8081 -v /opt/springboot-docker-1.0.jar:/var/li ...

  8. vue3实现多层级的动态表单增减

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  9. 在 Kubernetes 中基于 StatefulSet 部署 MySQL(上)

    大家好,我是老 Z! 本文实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化这种形式.下一篇文章将会涉及 GitOps 的基础操作,部署过程 ...

  10. 《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

    <这是全网最硬核redis总结,谁赞成,谁反对?>六万字大合集 我啥都不想说了,本文章来自 "本来可以靠脸吃饭的,非得靠技术的一位小姐姐" 名字叫:"兔兔Ra ...