[hiho 16]RMQ-ST算法
问题描述
问题就是询问区间内的最小值。
数据量n, 查询量q。
朴素的算法复杂度O(nq)。
为减少冗余计算,预先计算出每个位置起 2^k 长度范围内的最小值。
data[i][j]表示从 i 起的 2^k 个元素的最小值。
递推式 data[i][j] = min{data[i][j – 1], data[i + 1 << (j - 1)][j - 1]}。
针对询问 [L, R],计算出最大的 k 使得 2^k < R – L + 1,区间最小值就是 min{data[L][k], data[R – 1 << k + 1][k]}。
之所以取 2 为底,是因为计算机数据是二进制储存的,位运算比较方便省时,同时递推和结果表达也较为简单。
ST算法的复杂度是 O(nlogn + q)。
#include <stdio.h>#define min(a, b) ((a) < (b) ? (a) : (b))
#define MAX 1000005
int data[MAX][25];int main(){int n;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &data[i][0]);}int max_i = 0;int t = n;while (t) {max_i++;t >>= 1;}for (int i = 1; i < max_i; i++) {int len = 1 << i;for (int j = 1; j <= n - len + 1; j++) {data[j][i] = min(data[j][i - 1], data[j + len / 2][i - 1]);}}scanf("%d", &n);int a, b;while (n--) {scanf("%d%d", &a, &b);int len = b - a + 1;int i = 0;while(len) {i++;len >>= 1;}i--;len = 1 << i;printf("%d\n", min(data[a][i], data[b - len + 1][i]));}return 0;
}
转载于:https://www.cnblogs.com/xblade/p/4489029.html
[hiho 16]RMQ-ST算法相关推荐
- 【原创】RMQ - ST算法详解
ST算法: ID数组下标: 1 2 3 4 5 6 7 8 9 ID数组元素: 5 7 3 1 4 8 2 9 8 1.ST算法 ...
- RMQ ST算法简介
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
- RMQ问题(线段树算法,ST算法优化)
RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在[i,j]里的最小(大)值 ...
- 动态规划-RMQ问题(ST算法)
文章目录 RMQ问题 ST算法 模板 例题 P2251 质量检测 P1816 忠诚 P2216 [HAOI2007]理想的正方形 RMQ问题 RMQ(Range Minimum/Maximum Que ...
- RMQ问题,加深对ST算法的理解(Sparse Table)
Sparse Table(稀疏表):简称ST 简介 ST 算法本质是动态规划. 时间复杂度为: 预处理:O(nlogn) 查询:O(1) 它 适宜用于 数据不再作出变化(也称离线) 的 区间最值 查询 ...
- ST算法解决RMQ问题
关于ST算法,实际上它本身并不难,它的思想是动态规划.主要用来求RMQ问题,时间复杂度为O(NlgN+M) 关于RMQ问题描述: 输入N个数和M次询问,每次询问一个区间[L,R],求第L个数到R个数 ...
- ST算法 - RMQ(区间最值问题)—— 倍增
文章目录 引入倍增: 例题1:区间和 例题2:Genius ACM 应用: ST算法 求解 RMQ(区间最值问题) 模板Code: 练习题: ST算法 维护区间最大公约数 例题:Pair of Num ...
- RMQ的ST算法(区间最值)
ST算法求解RMQ问题(区间最值) 效率:O(n log n)预处理,O(1)询问 思想: 用 f [ i ][ j ] 表示 以i 开头的区间,包括2^j 个元素的一段区间的最值 那么有初始化的初始 ...
- 1470: 区间求最值(RMQ问题,ST算法模板)
1470: 区间求最值 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 给定一个长度为N ...
最新文章
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
- 史上最萌的统计学入门书,快来看看长啥样
- Java分布式内存开源实现:Hazelcast
- hihoCoder week17 最近公共祖先·三 lca st表
- gdcm::ImageChangePhotometricInterpretation的测试程序
- python课件_如何20小时搞定Python量化期权实战?
- 【DI专题】在 DI 脚本文件中调用存储过程
- 子网规划与组网实验_【干货】从0到1,“大型WLAN组网”基础知识分享~
- Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
- android gps 案例_GPS学习要点10
- 【汇编优化】之x86汇编与C相互调用
- JavaWeb开发必会技巧1——导入jar包
- 中国顶级***--小榕
- 【转】Android开发人员不得不收集的代码(不断更新)
- OneNET麒麟座应用开发之一:初识OneNET麒麟座
- android edittext底线,android – 更改edittext的底线颜色
- CAXA电子图板2013机械版下载及安装教程详解
- 开启cdn后导致websocket10秒直接断开连接 报错1006
- 测试工程师简历编写指南
- Hot 100(三)
热门文章
- 仿京东放大镜效果的实现
- 有源汇有上下界最大流/最小流 配题(HDU 3157)
- 2.1 数据库之序列,索引和同义词
- HP 1920交换机兼容SFP光模块和光纤跳线解决方案
- 统计不同数字的个数(升级版)
- 科创板|海天瑞声终止审核 系本周第3家
- [原创] CPS1模拟器开发日志
- 抖音修改东西一直显示服务器升级,抖音提示服务器维护怎么办?抖音提示服务器维护的解决方法...
- 软件学院招生宣传视频工作日志——剧本讨论
- P2782友好城市(LIS,动态规划dp)C语言版