RMQ问题旨在对于大量的询问,高效的返回一个区间中的最大值或最小值。RMQ为在线算法,对于一个长度为n的序列,预处理需要O(nlogn),查询只需要O(1),但不支持值的修改。


RMQ的实现
RMQ的本质是动态规划,用一个二维数组d[i][j]来存储该序列以ai为首位2^j长度的序列中的最大/最小值,那么d[i][j]就可以由d[i][j-1]和d[i+2^(j-1)][j-1]推出,如图:

算法步骤:
1.通过一个循环把d[i][0]的值全部置为a[i];
2.从小到大枚举j
从小到大枚举i(i+2^j不能大于整个序列长度n)
d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);

核心代码:

int dp() {for(int i=0; i<n; i++) {d[i][0]=a[i];}for(int j=1; (1<<j)<=n; j++)for(int i=0; i+(1<<j)<n; i++) {d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);}}

查询:找到最小的k使L+2*k>=R;
输出d[L][K],d[R-k+1][K]的最大值
原则是两个区间可以重复,但不能遗漏

int find_max(int L,int R) {if (L > R) return 0;int k=0;while((1<<(k+1))<=R-L+1)k++;return max(d[L][k],d[R-(1<<k)+1][k]);
}

RANGE MINIUM/MAXIUM QUERY问题相关推荐

  1. Codeforces Round #849 (Div. 4) F. Range Update Point Query

    Codeforces Round #849 (Div. 4) F. Range Update Point Query 题目大意: 给一串数字,有两个操作: 操作1:将 l − r l-r l−r 的数 ...

  2. RMQ(Range Minimum/Maximum Query)问题:

    RMQ问题是求给定区间中的最值问题.当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够.可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值 ...

  3. Elasticsearch DSL中Query与Filter的不同

    Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search {"query": { & ...

  4. elasticsearch查询term等级(query查询)

    文章目录 es下term级别的查询语句 term-level queries 用于query或filter上下文 exists 存在性查询 fuzzy 查询 ids 批量id查询 prefix 前缀查 ...

  5. 算法编程Algos Programming

    算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...

  6. 可用于nodejs的SuperAgent(ajax API)

    简单示例: import request from 'superagent';//引用声明 request.post(api).withCredentials()//跨域.end((err, res) ...

  7. Oracle中Hint深入理解(原创)

    http://czmmiao.iteye.com/blog/1478465 Hint概述  基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...

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

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

  9. Python 基于Python从mysql表读取千万数据实践

    基于Python 从mysql表读取千万数据实践   by:授客 QQ:1033553122 场景:   有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_b ...

  10. RMQ ST算法简介

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

最新文章

  1. java环境变量设置
  2. pyqt5 tableview 设置行颜色_Tools Ⅰ:如何用 PyQt5 和 Qt Designer 在 Pycharm 中愉快地开发软件...
  3. php set error handler,php的set_error_handler正确用法
  4. Python 小入坑
  5. ubuntu jdk tomcat mysql_Ubuntu下JDK+Tomcat+MySql环境的搭建
  6. spss正态性检验_SPSS和R中的正态分布的确定和几何均值的计算
  7. Linux内核设计与实现
  8. 微信表情包 php,教你用PS给你的室友做一套动态微信豪华表情包
  9. 23位子网掩码是多少_24 28 30 位的子网掩码是多少
  10. Git 换行符自动转换
  11. 微信支付记录删除后怎么恢复?赶紧收藏这两个小技巧
  12. 【ML】 第四章 训练模型
  13. 用“意念”发Twitter,静脉植入脑机接口电极,渐冻症患者把思想转化为文字
  14. GEE--LandTrendr
  15. Python基础之线程(Thread)
  16. python股票数据分析_用Python进行股票数据分析
  17. ​MYSQL中常用的SQL语句​(增删改查)
  18. “杭州最惨创业者”事件初步法律分析
  19. 国内外靠谱翻译公司推荐,总有一家能让你挣到钱丨打死个翻译官 3.3
  20. CodeCraft-19 and Codeforces Round #537 (Div. 2)

热门文章

  1. 云计算与大数据应用技术————21大数据2021142247537刘新敏
  2. .NET 再出发, 20岁生日快乐
  3. 【面试笔试-c/c++】人民搜索2012校园招聘试题
  4. 动态规划--背包计数--hdu2079选课时间
  5. 图像处理系列——图像融合之加权平均(WA)
  6. 第一章节:期货及衍生品概述
  7. 路径规划算法:Dijkstra
  8. html引入阿里在线css文件夹,阿里字体css代码引入方法
  9. Python - PyMuPDF (fitz) 处理 PDF
  10. 路由器连接光猫用桥接模式好还是用路由模式好?路由器桥接模式vs路由模式