【51Nod】1174 区间中最大的数
来源:互联网 发布:淘宝开店交多少保证金 编辑:程序博客网 时间:2024/05/10 07:59
题意
给出一个有N个数的序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,最大的数是多少。
例如: 1 7 6 3 1。i = 1, j = 3,对应的数为7 6 3,最大的数为7。(该问题也被称为RMQ问题)
解题思路
RMQ经典问题
参考代码
#include <iostream>using namespace std;const int MAXN = 10010;int dp[MAXN][20];int mm[MAXN];void initRMQ(int n, int b[]){ mm[0] = -1; for (int i = 1; i <= n; i++) { mm[i] = ((i & (i - 1)) == 0) ? mm[i - 1] + 1 : mm[i - 1]; dp[i][0] = b[i]; } for (int j = 1; j <= mm[n]; j++) { for (int i = 1; i + (1 << j) - 1 <= n; i++) { dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]); } }}int rmq(int x, int y){ int k = mm[y - x + 1]; return max(dp[x][k], dp[y - (1 << k) + 1][k]);}int main(int argc, const char * argv[]){ int N; cin >> N; int b[MAXN]; for (int i = 1; i <= N; i++) { cin >> b[i]; } initRMQ(N, b); int Q; cin >> Q; int left, right; for (int i = 0; i < Q; i++) { cin >> left >> right; cout << rmq(left + 1, right + 1) << '\n'; } return 0;}
阅读全文
0 0
- 51nod 1174 区间中最大的数【线段树】
- 51nod 1174 区间中最大的数
- 51nod--1174 区间中最大的数 (RMQ)
- 【51Nod】1174 - 区间中最大的数(RMQ)
- 51nod 1174 区间中最大的数(线段树)
- 51nod 1174 区间中最大的数
- 51nod:1174 区间中最大的数(RMQ)
- 【51Nod】1174 区间中最大的数
- 51Nod 1174区间中最大的数
- 51Nod-1174-区间中最大的数
- 51Nod 1174 区间中最大的数 线段树
- 51Nod-1174-区间中最大的数
- 51Nod-1174 区间中最大的数(RMQ)
- 51Nod 1174:区间中最大的数
- 51Nod 1174 区间中最大的数<线段树>
- 51nod 1174 区间中最大的数(RMQ)
- 51nod 1174 区间中最大的数
- 51Nod-1174-区间中最大的数
- poj 1769
- 自定义类加载器的实现和使用?
- CheckBox基本使用
- NOIP2010 提高组 复赛 flow 引水入城
- windows之鼠标穿透窗口事件
- 【51Nod】1174 区间中最大的数
- APM和PIX飞控日志分析入门贴
- 【c++基础】2.数据类型、类型转换、变量
- xuptoj 1121约瑟夫环问题
- JNDI
- Java虚拟机运行时数据区
- Ubuntu LAMP环境下,用 jsp 写出一个页面,读取MYSQL实验中的数据表数据
- CF Educational Round#21 G Solution:双函数DP+KMP
- j2ee-规范-jdbc-视图调用(oracle为例)