RMQ算法详解
来源:互联网 发布:灵格斯词霸 mac 编辑:程序博客网 时间:2024/05/20 20:05
rmq这个东西其实是可以用线段树来实现的但是毕竟rmq代码简单嘛
算法思路就是dp所以我们要开一个dp的全局变量
dp[i][j]就是以i开头长度为2^j的一段中最大的值
那么很容易的我们就可以推出状态转移方程
dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
把dp数组求出来后我们就可以进行查询了,查询的方法就见代码了啊
初始化代码:
void rmq_init(int *a,int len){ for(int i=1;i<=len;i++) dp[i][0]=a[i]; for(int j=1;(1<<j)<=len;j++) for(int i=1;i+(1<<j)-1<=len;i++) dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);}查询代码
int rmq(int l,int r){ int len=r-l+1; int k(0); while((1<<(k+1))<=len) k++; int ans; //printf("%d %d %d %d\n",l,l+(1<<k),r-(1<<k),r-(1<<k)+(1<<k)); if (dp[l][k]>dp[r-(1<<k)+1][k]) ans=dp[l][k]; else ans=dp[r-(1<<k)+1][k]; return ans;}注意!那个a数组一定要是从1开始的哦
0 0
- RMQ 算法详解
- RMQ算法详解
- RMQ算法详解
- RMQ算法详解
- rmq算法详解 模板
- RMQ算法详解
- RMQ的st算法详解
- 零零散散学算法之详解RMQ & LCA
- RMQ问题的ST算法详解
- 零零散散学算法之详解RMQ & LCA
- RMQ算法详解(持续更新 )
- 【RMQ】RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- 数据结构与算法之栈:反转一个栈的两种解法
- linux 下各errno的意义
- 上海发布城市非核心功能疏解研究报告(附清单)
- DOCKER简明教程 : 通过容器连接REDIS数据库
- UE4当ForeachLoop循环遇上Delay不能实现的解决办法
- RMQ算法详解
- Spring aop aspect
- 行内元素与块级元素比较全面的区别和转换
- Python基础入门(十八)-函数
- DOS命令学习
- Eclipse跳不到断点处:出现Source not found
- JS设计模式开篇
- uva 1605 Building for UN
- sql语句优化的13中方法