C++的RMQ的代码实现
来源:互联网 发布:离线背单词软件 编辑:程序博客网 时间:2024/05/22 05:33
/* 1.dp[i][j]表示从i开始长为2的j次方的数组长度,所以他是a[i]~a[i+2^j-1]的数组里的最值。 2.i<<j的意思是:二进制的i往左移j位,等效于i*2^j。 3.用动态规划的办法来构建dp的。 4.每次找dp[i][j]的最值的时候都是拆了一半来找,因为前面已经找了他的一半情况下的最值 dp[i][j]=max(dp[i][j-1],dp[i+(1<<j-1)][j-1]; 5.重点解释下关于dp构建好之后如何查找的问题: 如果我要查找[left,right]中的最值,我先把 int k= right-left+1 ; k=log2k; 然后取dp[left][k],dp[right-(1<<k)+1][k]中的最值 这样不仅使两个dp的范围相交而且保证在[left,right]区间 */ #include<cstdio>#include<iostream>#include<cmath>using namespace std;int dp[101][101];int a[101];int main() {//freopen("test.txt","r",stdin);int n; cin>>n;for(int i=1;i<=n;i++) cin>>dp[i][0];for(int i=1;i<=n;i++) for(int j=1;j+(1<<i)-1<=n;j++) { dp[j][i]=max(dp[j][i-1],dp[j+(1<<(i-1))][i-1]); }int left,right; cin>>left>>right;int k=right-left+1; k=log2(k);int maxnum=max(dp[left][k],dp[right-(1<<k)+1][k]);cout<<maxnum<<endl;return 0;}
阅读全文
0 0
- C++的RMQ的代码实现
- RMQ的两种实现方法
- 堆栈的C代码实现
- ARP的C代码实现
- 栈的c代码实现
- 队列的c代码实现
- 学习LCA 基于rmq的lca 代码注释
- 简单的RMQ(RMQ+ST NEUQ“图灵杯”)
- C函数atoi,itoa的实现代码
- 多项式除法的实现(附c代码)
- 实现base64编码的C代码
- KMP算法的C语言代码实现
- kmp算法的c代码实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 选择排序的c实现代码
- 快速排序的C语言代码实现
- UDPSender 一个基于NIO的UDP发送器/接收器
- 随笔(mybatis)——Error getting nested result map values for ''.
- TCP为什么是三次握手?
- OpenGL蓝宝书源码学习(八)第四章——SphereWorld.cpp
- 快速排序
- C++的RMQ的代码实现
- hadoop学习笔记--6.MapReduce的初识
- 阿里巴巴云服务器ECS外网无法访问IIS
- java中四种引用类型
- TensorFlow的训练模型在Android和Java的应用及调用
- maven搜索jar包, Index downloads are disabled, search results may be incomplete
- 在树莓派上利用神经网络字符识别实现智能送餐车
- mysql数据库性能测试工具-----mysqlslap
- Java WEB项目中获取路径方法