rmq(int i,int j,int a)表示查询a数组i到j区间的内容中的最大/最小值核心部分为二分区间以及st预处理算法

先说st预处理算法吧

int dp[i][j];//表示以i开始 长度为2^j的区间里面元素的最大值

那么 dp[i][0] 就表示a[i]本身了 那么dp[i][j]怎么求呢? 我们将需要求的区间二分 2^k为区间二分后的长度 k的求法如下

int k=log(double(n+1))/log(2.0);//n为数组的长度

那么 dp[i][j]=max(dp[i][j-1],dp[i+(1<<j)][j-1]); 这就是st的状态转移方程 也是区间的二分思想 既然我们dp[j]需要dp[j-1]的状态那么 我们写两层循环的时候j的值是顺序的 i的值按循序遍历即可

for(int j=1;j<=k;j++)
{
for(int i=1;i+(1<<j)-1<=n;i++) dp[i][j]=max(dp[i][j-1],dp[i+(1<<j)][j-1]);
}

然后是总的rmq

给个题目吧 hdu 3183

int k=log(double(n+1))/log(2.0);//n为数组的长度
int dp[i][j];//表示以i开始 长度为j的区间里面元素的最大值
for(int i=1;i<=n;i++) dp[i][0]=a[i];//dp的初始化问题
for(int j=1;j<=k;j++)
{
for(int i=1;i+(1<<j)-1<=n;i++) dp[i][j]=max(dp[i][j-1],dp[i+(1<<j)][j-1]);
}
int rmq(int i,int j)
{
int k=log(double(i+j))/log(2.0);
return max(dp[i][k],dp[j-(1<<k)+1][k]);
}

对于st预处理的过程 有两种返回情况  第一种是返回值 第二种是返回值的下标

对于 3183 返回下标比较有用

int st[][];  

int Min(int x,int y)
{

return
s[x] <= s[y] ? x : y; //这一步是核心 判断的时候 对应返回的是下标 用下标去对应值
}
void RMQ_Init(int len)
{

for
(int i =; i < len; i++)
st[i][] = i;
for
(int j =; (<<j) < len; j++)
for
(int i =; i+(<<j)- < len;i++)
st[i][j] = Min(st[i][j-],st[i+(<<(j-))][j-]);
}
int Query(int l,int r)
{

int
k = (int)(log((double)(r-l+))/log(2.0));
return
Min(st[l][k],st[r-(<<k)+][k]);
}

整理一下rmq的更多相关文章

  1. RMQ 算法 学习整理

    1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...

  2. hiho 1068 重新整理的 Sparse-Table(RMQ)模板

    http://hihocoder.com/problemset/problem/1067代码: #include <iostream> #include <cstdio> #i ...

  3. NOIP模板整理计划

    先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...

  4. Android面试题整理【转载】

      面试宝典(5)  http://www.apkbus.com/android-115989-1-1.html 面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad ...

  5. ACM数据结构相关资料整理【未完成,待补充】

    在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...

  6. 【BZOJ 3473】 字符串 (后缀数组+RMQ+二分 | 广义SAM)

    3473: 字符串 Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串 ...

  7. 【算法】RMQ LCA 讲课杂记

    4月4日,应学弟要求去了次学校给小同学们讲了一堂课,其实讲的挺内容挺杂的,但是目的是引出LCA算法. 现在整理一下当天讲课的主要内容: 开始并没有直接引出LCA问题,而是讲了RMQ(Range Min ...

  8. 夏令营讲课内容整理 Day 3.

    本日主要内容是树与图.   1.树 树的性质 树的遍历 树的LCA 树上前缀和   树的基本性质: 对于一棵有n个节点的树,必定有n-1条边.任意两个点之间的路径是唯一确定的.   回到题目上,如果题 ...

  9. ACM/IOI 历年国家集训队论文集和论文算法分类整理

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率--从IOI98试题PICTURE谈起> 来煜坤:<把握本质,灵活运用--动态规划的深入探讨> 齐鑫:<搜索方法 ...

随机推荐

  1. Mat转CImage

    uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址 ps=img.ptr<uchar>(i); void MatToCImage( Mat ...

  2. OS X环境下如何搭建编译Cocos2D-X v3.x的Android Studio工程

    Cocos2D-X官网已经简单介绍了如何在OS X环境下搭建Cocos2D-X v2.x和v3.x的指南.具体链接为:http://www.cocos.com/doc/article/index?ty ...

  3. starUML建模C++【逆向工程】

    1.下载starUML 2.打开starUML,选择default approach 3.添加 Profile,把C++添加进去 4.在右侧的工程上点右键—[C++]—-[Reverse Engine ...

  4. 自定义string类

    #include <iostream> #include <cstring> using namespace std; class String; class Data{ // ...

  5. 阿里fastjson工具类

    package com.common.utils.jsonUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JS ...

  6. 使用wsimport生成webservice客户端代码

    服务端 package com.xc.webservice; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebServic ...

  7. JS时间转换,url编码,jquery返回类型等问题

    1.当时间被转换为json格式后会被转换成 /Date(...)/ 这种格式,其中...为时间转换成妙后的一串整数 function changeDateFormat(cellval) { )); v ...

  8. Spring Cloud(7.3):配置Consumer Server

    接下来我们创建一个消费者服务.消费者服务从生产者服务拿取商品-价格信息,并保存在Redis中.同时,接收消息队列中生产者服务的更新提示,如果某个商品-价格被修改,则删除Redis中的缓存数据,并重新从 ...

  9. [转]Postgres-XL 10r1英文文档

    Postgres-XL 是一个完全满足ACID的.开源的.可方便进行水平扩展的.多租户安全的.基于PostgreSQL的数据库解决方案. Postgres-XL 可非常灵活的应用在各类场景中,比如: ...

  10. springboot项目自定义注解实现的多数据源切换

    一.主要依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...