范围最小值问题 (Range Minimum Query,RMQ)
2015-10-19 11:52
531 查看
范围最小值问题 (Range Minimum Query,RMQ)
给出一个n个元素的数组A1,A2,…,An设计一个数据结构,支持查询操作Query(L,R):计算min {AL,AL+1,..AR}.
思路:令d(i,j)表示从i开始的,长度为2^j的一段元素中的最小值,用递推的方法计算d(i,j),d(i,j) = min{d(i,j-1),d(i+2^(j-1), j-1)}
查询操作,令k为满足2^k<=R-L+1的最大整数,则以L开头、以R结尾的两个长度为2^k的区间合起来覆盖查询区间[L, R].
[code]#include <cstdio> #include <vector> #include <algorithm> using namespace std; void RMQ_init(const vector<int>& A) { int n = A.size(); 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) - 1 < n; i++) { d[i][j] = min(d[i][j-1], d[i+(1<<(j-1))][j-1]); } } } int RMQ(int L, int R) { int j = 0; while ((1<<(j+1)) <= R-L+1) { j++; } return min(d[L][j], d[R-(1<<j)+1][j]); }
相关文章推荐
- UI星辰:疯狂食材总结
- QtCreator创建的GUI Project工程文件介绍
- 根据GUID类别获取设备信息
- 【IOS 开发学习总结-OC-57】★UI之UICollectionView 与UICollectionViewController
- iOS8统一的系统提示控件——UIAlertController
- UIRefreshControl(下拉刷新系统控件)
- getRequestURI,getRequestURL的区别
- iOS 约束 自动布局 UI
- SPOJ GSS6 Can you answer these queries VI
- SharePoint 2013 IT Professional--如何配置Access Request Setting
- Could not resolve placeholder 'jdbc.username' in string value "${jdbc.username}"
- iOS巅峰之UIScrollView滑动的左右上下位置控制
- module中build.gradle文件参数含义
- iOS5中UIViewController的新方法
- 用Maonry如何实现UIScrollView
- Required method destroyItem was not overridden
- iOS 设置项目的version和build号
- iOS 之版本号 Version / Build 分析与脚本自动化
- iOS 拍照和摄像UIImagePickerController
- Common Subsequence