RANGE MINIUM/MAXIUM QUERY问题
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问题相关推荐
- 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 的数 ...
- RMQ(Range Minimum/Maximum Query)问题:
RMQ问题是求给定区间中的最值问题.当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够.可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值 ...
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search {"query": { & ...
- elasticsearch查询term等级(query查询)
文章目录 es下term级别的查询语句 term-level queries 用于query或filter上下文 exists 存在性查询 fuzzy 查询 ids 批量id查询 prefix 前缀查 ...
- 算法编程Algos Programming
算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...
- 可用于nodejs的SuperAgent(ajax API)
简单示例: import request from 'superagent';//引用声明 request.post(api).withCredentials()//跨域.end((err, res) ...
- Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...
- RMQ问题(线段树算法,ST算法优化)
RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在[i,j]里的最小(大)值 ...
- Python 基于Python从mysql表读取千万数据实践
基于Python 从mysql表读取千万数据实践 by:授客 QQ:1033553122 场景: 有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_b ...
- RMQ ST算法简介
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
最新文章
- java环境变量设置
- pyqt5 tableview 设置行颜色_Tools Ⅰ:如何用 PyQt5 和 Qt Designer 在 Pycharm 中愉快地开发软件...
- php set error handler,php的set_error_handler正确用法
- Python 小入坑
- ubuntu jdk tomcat mysql_Ubuntu下JDK+Tomcat+MySql环境的搭建
- spss正态性检验_SPSS和R中的正态分布的确定和几何均值的计算
- Linux内核设计与实现
- 微信表情包 php,教你用PS给你的室友做一套动态微信豪华表情包
- 23位子网掩码是多少_24 28 30 位的子网掩码是多少
- Git 换行符自动转换
- 微信支付记录删除后怎么恢复?赶紧收藏这两个小技巧
- 【ML】 第四章 训练模型
- 用“意念”发Twitter,静脉植入脑机接口电极,渐冻症患者把思想转化为文字
- GEE--LandTrendr
- Python基础之线程(Thread)
- python股票数据分析_用Python进行股票数据分析
- ​MYSQL中常用的SQL语句​(增删改查)
- “杭州最惨创业者”事件初步法律分析
- 国内外靠谱翻译公司推荐,总有一家能让你挣到钱丨打死个翻译官 3.3
- CodeCraft-19 and Codeforces Round #537 (Div. 2)