问题描述

问题就是询问区间内的最小值。

数据量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算法相关推荐

  1. 【原创】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算法 ...

  2. RMQ ST算法简介

    RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...

  3. RMQ问题(线段树算法,ST算法优化)

    RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在[i,j]里的最小(大)值 ...

  4. 动态规划-RMQ问题(ST算法)

    文章目录 RMQ问题 ST算法 模板 例题 P2251 质量检测 P1816 忠诚 P2216 [HAOI2007]理想的正方形 RMQ问题 RMQ(Range Minimum/Maximum Que ...

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

    Sparse Table(稀疏表):简称ST 简介 ST 算法本质是动态规划. 时间复杂度为: 预处理:O(nlogn) 查询:O(1) 它 适宜用于 数据不再作出变化(也称离线) 的 区间最值 查询 ...

  6. ST算法解决RMQ问题

    关于ST算法,实际上它本身并不难,它的思想是动态规划.主要用来求RMQ问题,时间复杂度为O(NlgN+M)  关于RMQ问题描述: 输入N个数和M次询问,每次询问一个区间[L,R],求第L个数到R个数 ...

  7. ST算法 - RMQ(区间最值问题)—— 倍增

    文章目录 引入倍增: 例题1:区间和 例题2:Genius ACM 应用: ST算法 求解 RMQ(区间最值问题) 模板Code: 练习题: ST算法 维护区间最大公约数 例题:Pair of Num ...

  8. RMQ的ST算法(区间最值)

    ST算法求解RMQ问题(区间最值) 效率:O(n log n)预处理,O(1)询问 思想: 用 f [ i ][ j ] 表示 以i 开头的区间,包括2^j 个元素的一段区间的最值 那么有初始化的初始 ...

  9. 1470: 区间求最值(RMQ问题,ST算法模板)

    1470: 区间求最值 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 给定一个长度为N ...

最新文章

  1. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
  2. 史上最萌的统计学入门书,快来看看长啥样
  3. Java分布式内存开源实现:Hazelcast
  4. hihoCoder week17 最近公共祖先·三 lca st表
  5. gdcm::ImageChangePhotometricInterpretation的测试程序
  6. python课件_如何20小时搞定Python量化期权实战?
  7. 【DI专题】在 DI 脚本文件中调用存储过程
  8. 子网规划与组网实验_【干货】从0到1,“大型WLAN组网”基础知识分享~
  9. Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
  10. android gps 案例_GPS学习要点10
  11. 【汇编优化】之x86汇编与C相互调用
  12. JavaWeb开发必会技巧1——导入jar包
  13. 中国顶级***--小榕
  14. 【转】Android开发人员不得不收集的代码(不断更新)
  15. OneNET麒麟座应用开发之一:初识OneNET麒麟座
  16. android edittext底线,android – 更改edittext的底线颜色
  17. CAXA电子图板2013机械版下载及安装教程详解
  18. 开启cdn后导致websocket10秒直接断开连接 报错1006
  19. 测试工程师简历编写指南
  20. Hot 100(三)

热门文章

  1. 仿京东放大镜效果的实现
  2. 有源汇有上下界最大流/最小流 配题(HDU 3157)
  3. 2.1 数据库之序列,索引和同义词
  4. HP 1920交换机兼容SFP光模块和光纤跳线解决方案
  5. 统计不同数字的个数(升级版)
  6. 科创板|海天瑞声终止审核 系本周第3家
  7. [原创] CPS1模拟器开发日志
  8. 抖音修改东西一直显示服务器升级,抖音提示服务器维护怎么办?抖音提示服务器维护的解决方法...
  9. 软件学院招生宣传视频工作日志——剧本讨论
  10. P2782友好城市(LIS,动态规划dp)C语言版