解决什么问题:区间查询最值

倍增思想:每次得出结果的范围呈2的幂次增长,有人说相当于二分,目前我觉得相当于线段树的查找.

具体理解看代码:

/*倍增法求ST*/
#include<math.h>
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int n,dp[110][110];
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&dp[i][0]);
/*dp[i][j]=x x就是[i,i+2^j-1]的最大值*/
for(int j=1;j<=log2(n);j++)/* 保证2 ^ j < = n */
for(int i=1;i<=n-(1<<j)+1;i++)/* i+2^j-1<=n -> i<=n-2^j+1 */
dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
/*对于所有点 i 由已知u [i,i+2^(j-1)-1] 范围内的最值求出他的二倍范围内的最值
for(int i=1;i<=n;i++)
{
printf("i=%d\n",i);
printf("dp[%d][0]:%d ",i,dp[i][0]);
for(int j=1;j<=log2(n);j++)
if(dp[i][j])
printf("dp[%d][%d]=dp[%d][%d],dp[%d][%d]:%d ",i,j,i,j-1,i+(1<<(j-1)),j-1,dp[i][j]);//i,i+2^j-1
printf("\n");
}
好像确实像二分多一点*/ int l,r,k;
scanf("%d%d",&l,&r);
k=log2(r-l+1);
/* 2^k 为从l开始的查询区间的长度,2^k<r-l+1 -> l<r-2^k+1 */
printf("%d\n",max(dp[l][k],dp[r-(1<<k)+1][k]));
return 0;
}
/*
10
1 2 3 4 5 6 7 8 9 10
*/

RMQ(倍增法求ST)的更多相关文章

  1. HDU 2586 倍增法求lca

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. 倍增法求LCA

    倍增法求LCA LCA(Least Common Ancestors)的意思是最近公共祖先,即在一棵树中,找出两节点最近的公共祖先. 倍增法是通过一个数组来实现直接找到一个节点的某个祖先,这样我们就可 ...

  3. 倍增法求lca(最近公共祖先)

    倍增法求lca(最近公共祖先) 基本上每篇博客都会有参考文章,一是弥补不足,二是这本身也是我学习过程中找到的觉得好的资料 思路: 大致上算法的思路是这样发展来的. 想到求两个结点的最小公共祖先,我们可 ...

  4. 用“倍增法”求最近公共祖先(LCA)

    1.最近公共祖先:对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.的祖先且x的深度尽可能大. 2.朴素算法:记录下每个节点的父亲,使节点u,v一步一步地向上找 ...

  5. 树上倍增法求LCA

    我们找的是任意两个结点的最近公共祖先, 那么我们可以考虑这么两种种情况: 1.两结点的深度相同. 2.两结点深度不同. 第一步都要转化为情况1,这种可处理的情况. 先不考虑其他, 我们思考这么一个问题 ...

  6. 倍增法求LCA(最近公共最先)

    对于有根树T的两个结点u.v,最近公共祖先x=LCA(u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. 如图,根据定义可以看出14和15的最近公共祖先是10,   15和16的最近公共 ...

  7. 在线倍增法求LCA专题

    1.cojs 186. [USACO Oct08] 牧场旅行 ★★   输入文件:pwalk.in   输出文件:pwalk.out   简单对比时间限制:1 s   内存限制:128 MB n个被自 ...

  8. poj3264 倍增法(ST表)裸题

    打出st表的步骤:1:建立初始状态,2:区间按2的幂从小到大求出值 3:查询时按块查找即可 #include<iostream> #include<cstring> #incl ...

  9. LCA 在线倍增法 求最近公共祖先

    第一步:建树  这个就不说了 第二部:分为两步  分别是深度预处理和祖先DP预处理 DP预处理: int i,j; ;(<<j)<n;j++) ;i<n;++i) ) fa[i ...

随机推荐

  1. 初学qt——数据库连接

    连接数据库我们需要有相应的dll文件,不同的数据库用不同的文件,对应的dll这里就不提供了,网上一搜一堆,就只说下这些文件的存放位置吧. 找到对应的dll文件后打开自己安装的qt的文件目录,将dll文 ...

  2. 从0到1,本地到远程git程序过程

    从0到1,本地到远程git程序过程 切记一定要在需要提交代码的文件夹下git init,既是你使用了什么 tortoisegit什么工具,或者你在idea环境下已经add了,但是仍然需要你在当前文件夹 ...

  3. Nginx之反向代理配置(二)

    前文我们聊了Nginx的防盗链.反向代理以及开启nginx代理缓存,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12417130.html:今天我们继续说ng ...

  4. 这些Zepto中实用的方法集

    前言 时间过得可真快,转眼间2017年已去大半有余,你就说吓不吓人,这一年你成长了多少,是否荒度了很多时光,亦或者天天向上,收获满满.今天主要写一些看Zepto基础模块时,比较实用的部分内部方法,在我 ...

  5. XSS_跨站脚本攻击

    前段时间在网上看到一个网址,好奇之下进去看了看.胜利的条件是你录入一个串,让其调用prompt(1) .发现里面有好多想不到的东西,今天终于悠闲了来这里说说XSS. XSS 原理 恶意攻击者往Web页 ...

  6. 微信Android自动播放视频(可交互,设置层级,无控制条,非X5)ffmpeg,jsmpeg.js,.ts视频

    原料: ffmpeg : http://ffmpeg.zeranoe.com/builds/  win64 https://evermeet.cx/ffmpeg/   mac OS X 64 jsmp ...

  7. CSS实现响应式布局

    用CSS实现响应式布局 响应式布局感觉很高大上,很难,但实际上只用CSS也能实现响应式布局要用的就是CSS中的没接查询,下面就介绍一下怎么运用: 使用@media 的三种方法 1.直接在CSS文件中使 ...

  8. js对象中关于this关键字的作用

    前两天在前端群看到群友问的一个问题,问题如下: var Name = 'window'; var obj = { Name:'obj字符串', getName:function(){ console. ...

  9. C# 简单地使用下 音频解码器Bass.Net

    在C#中有许多音频播放的方案,例如WinForm里调用系统自带MediaPlayer的COM组件和WPF的MediaPlayer(实质上还是WindowsMediaPlayer) 以及一堆API播放和 ...

  10. 内网渗透之跨边界传输 - LCX转发

    跨边界转发 端口转发 lcx 流程 目标机 ./lcx -slave 跳板机ip 监听的端口 127.0.0.1 要转发的端口 跳板机(公网) ./lcx -listen 监听的端口 转发给攻击机访问 ...