RMQ:范围最小值问题。给出一个n个元素的数组A1,A2,...,An,设计一个数据结构支持查询操作Query(L,R):计算min{AL,AL+1,...,AR}。

每次用一个循环来求最小值显然不够快快,前缀和的思想也不能提高效率,这时候ST算法就派上用场了,它预处理的时间是O(nlogn),但是查询只需要Q(1),而且常数很小。

令dp[i][j]表示从i开始的,长度为2^j的一段元素中的最小值,递推公式:dp[i][j]=min{dp[i][j-1],dp[i+2^(j-1)][j-1]}

模板代码:

void RMQ_init(const vector<int> &A)
{
int n=A.size();
for(int i=;i<n;++i)
d[i][]=A[i];
for(int j=;(<<j)<=n;++j) //长度
for(int i=;i+(<<j)- <= n;++i) //起点,虽然书上写的是 < n
d[i][j]=min(d[i][j-],d[i+(<<(j-))][j-]);
}
int RMQ(int L,int R)
{
int k=;
while((<<(k+))<=R-L+) k++; //int k=(int)((log(R-L+1))/log(2.0));
return min(d[L][k],d[R-(<<k)+][k]);
}

模板题:南阳理工119

题意:求一段区间内的最大值和最小值之差,所以统计最大值和最小值分别用RMQ来统计

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int Max = + ;
int maxsum[Max][],minsum[Max][];
int n,q,v;
void RMQ_init()
{
for(int j = ; ( << j) <= n; j++)
{
for(int i = ; i + ( << j) - <= n; i++)
{
maxsum[i][j] = max(maxsum[i][j - ], maxsum[i + ( << (j - ))][j - ]);
minsum[i][j] = min(minsum[i][j - ], minsum[i + ( << (j - ))][j - ]);
}
}
}
int RMQ(int l, int r)
{
int k = ;
while( ( << (k + )) <= (r - l + ))
k++;
int maxn = max(maxsum[l][k], maxsum[r - ( << k) + ][k]);
int minn = min(minsum[l][k], minsum[r - ( << k) + ][k]); return maxn - minn;
}
int main()
{
while(scanf("%d%d", &n, &q) != EOF)
{
for(int i = ; i <= n; i++)
{
scanf("%d", &v);
minsum[i][] = maxsum[i][] = v;
}
RMQ_init();
while(q--)
{
int a,b;
scanf("%d%d", &a, &b);
printf("%d\n", RMQ(a,b));
}
}
return ;
}

RMQ模板的更多相关文章

  1. Zeratul的完美区间(线段树||RMQ模板题)

    原题大意:原题链接 给定元素无重复数组,查询给定区间内元素是否连续 解体思路:由于无重复元素,所以如果区间内元素连续,则该区间内的最大值和最小值之差应该等于区间长度(r-l) 解法一:线段树(模板题) ...

  2. Poj 3264 Balanced Lineup RMQ模板

    题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...

  3. POJ 3264:Balanced Lineup(RMQ模板题)

    http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...

  4. POJ3264 Balanced Lineup [RMQ模板]

    题意:有n头牛,输入他们的身高,求某区间身高的极值的差(max-min), 用RMQ模板,同时构造求极大值和极小值的两个数组. //poj3264 #include <iostream> ...

  5. 二维RMQ模板

    int main(){ ; i <= n; i++) ; j <= m; j++) { scanf("%d", &val[i][j]); dp[i][j][][ ...

  6. 玲珑oj 1128 RMQ模板

    1128 - 咸鱼拷问 Time Limit:3s Memory Limit:128MByte Submissions:380Solved:118 DESCRIPTION 给你两个序列A,B.每个序列 ...

  7. LCA上的RMQ模板算法

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

  8. 倍增算法总结 ( 含RMQ模板)

    部分题目来自<算法竞赛设计进阶> 问题       给定一个长度为n的数列A,有m个询问,每次给定一个整数T,求出最大的k,满足a[1],a[2]……a[k]的和小于等于T(不会打sigm ...

  9. RMQ 模板题 poj 3264

    题目:点这里 题意:给一个长度n的数列,然后又Q个询问,问L   到R   中最大值与最小值的差. 分析:RMQ 的模板题. 代码: #include<stdio.h> #include& ...

随机推荐

  1. 20140207 - Java and Mac OS X Retina

    在Mac下使用文件管理工具类似Total Commander的muCommander,muCommander的编写语言是Java,打开后发现Java不兼容Mac Retina. muCommander ...

  2. C语言strcat()函数:连接字符串

    头文件:#include <string.h> strcat() 函数用来连接字符串,其原型为:    char *strcat(char *dest, const char *src); ...

  3. 常用数据库高可用和分区解决方案(1) — MySQL篇

    在本文中我们将会讨论MySQL.Oracle.MongoDB.Redis以及Oceanbase数据库,大家可能会奇怪为什么看不到有名关系型数据库MSSQL.DB2或者有名NoSQL数据库Hbase.L ...

  4. Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错

    今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误.但是通过Entity映射,没有问题.在网上找了好多答案,终于解决了. 核心代码: Stri ...

  5. HttpModule与HttpHandler详解

    ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,A ...

  6. 【BZOJ 2434】【NOI 2011】阿狸的打字机 fail树

    完全不会啊,看题解还看了好久,我是蒟蒻$QAQ$ $zyf$的题解挺好的:http://blog.csdn.net/clove_unique/article/details/51059425 $fai ...

  7. 安装centos虚拟机

    启动虚拟机提示"无法连接虚拟设备ide1:0,主机上没有相对应的设备" 进入编辑虚拟机设置--选中硬盘--点高级--在 虚拟机设备节点中选ide0:0接行了.

  8. Python 编辑器 tips

    1.  IDLE界面美化 注意IDLE是可以设置语法高亮的:(美化参考 http://www.linuxidc.com/Linux/2012-07/66129.htm) windows 用户,直接打开 ...

  9. Lock读写锁技术的妙用

    1.面试题1:三个线程读,三个线程写同一个数据 public class ReadWriteLockTest { public static void main(String[] args) { fi ...

  10. Leetcode 343. Integer Break

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...