题目链接:

  Poj 3264 Balanced Lineup

题目描述:

  给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值。

解题思路:

  很模板的RMQ模板题,在这里总结一下RMQ:RMQ(Range Minimum/Maximum Query) 即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。

  RMQ有三种求法:1:直接遍历查找,炒鸡暴力;

           2:线段树也可以解决这一类问题;

           3:ST(Sparse Table)算法:在线处理RMQ问题,可以做到O(n*log(n))内预处理,O(1)内查询到所要结果。

  对于ST(Sparse Table)算法,预处理的时候用的是DP思想,用一个二维数组dp[i][j]记录区间[i,i+2^j-1] (持续2^j个)区间中的最小值(其中dp[i,0] = a[i])

  对于任意的一组(i,j),dp[i][j] = min{dp[i][j-1],dp[i+2^(j-1)][j-1]}来使用动态规划计算出来。最优美的地方还在与查询的时候,对于区间[m, n],可以找到一个k,k满足 n-m+1 < 2^(k+1),然后ans = min {dp[m][m+2^k-1],  [n-2^k+1][n]},区间[m,m+2^k-1]和[n-2^k+1,n]内的最值我们是预处理过的,所以在O(1)的时间内就可以找到ans咯。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
int dmin[maxn][], dmax[maxn][];
int arr[maxn]; void RMQ_init (int n)
{
for (int i=; i<n; i++)
dmin[i][] = dmax[i][] = arr[i]; for (int j=; (<<j)<=n; j++)
for (int i=; i+(<<j)-<n; i++)
{
dmin[i][j] = min (dmin[i][j-], dmin[i+(<<(j-))][j-]);
dmax[i][j] = max (dmax[i][j-], dmax[i+(<<(j-))][j-]);
}
}
int solve (int a, int b)
{
int x = ;
while (<<(x+) <= b-a+) x++;
int Max = max (dmax[a][x], dmax[b-(<<x)+][x]);
int Min = min (dmin[a][x], dmin[b-(<<x)+][x]);
return Max - Min;
} int main ()
{
int n, q, a, b;
while (scanf ("%d %d", &n, &q) != EOF)
{
for (int i=; i<n; i++)
scanf ("%d", &arr[i]);
RMQ_init( n );
while (q --)
{
scanf ("%d %d", &a, &b);
printf ("%d\n", solve(a-, b-));
}
}
return ;
}

Poj 3264 Balanced Lineup RMQ模板的更多相关文章

  1. POJ 3264 Balanced Lineup(模板题)【RMQ】

    <题目链接> 题目大意: 给定一段序列,进行q次询问,输出每次询问区间的最大值与最小值之差. 解题分析: RMQ模板题,用ST表求解,ST表用了倍增的原理. #include <cs ...

  2. poj 3264 Balanced Lineup (RMQ)

    /******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...

  3. POJ - 3264 Balanced Lineup (RMQ问题求区间最值)

    RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...

  4. poj 3264 Balanced Lineup (RMQ算法 模板题)

    RMQ支持操作: Query(L, R):  计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...

  5. POJ 3264 Balanced Lineup -- RMQ或线段树

    一段区间的最值问题,用线段树或RMQ皆可.两种代码都贴上:又是空间换时间.. RMQ 解法:(8168KB 1625ms) #include <iostream> #include < ...

  6. POJ 3264 Balanced Lineup RMQ ST算法

    题意:有n头牛,编号从1到n,每头牛的身高已知.现有q次询问,每次询问给出a,b两个数.要求给出编号在a与b之间牛身高的最大值与最小值之差. 思路:标准的RMQ问题. RMQ问题是求给定区间内的最值问 ...

  7. POJ 3264 Balanced Lineup 【ST表 静态RMQ】

    传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total S ...

  8. POJ 3264 Balanced Lineup(RMQ)

    点我看题目 题意 :N头奶牛,Q次询问,然后给你每一头奶牛的身高,每一次询问都给你两个数,x y,代表着从x位置上的奶牛到y位置上的奶牛身高最高的和最矮的相差多少. 思路 : 刚好符合RMQ的那个求区 ...

  9. poj 3264 Balanced Lineup(RMQ裸题)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 43168   Accepted: 20276 ...

随机推荐

  1. 【神乎其神】这些EXCEL技巧,太神奇了,赶紧收藏!

    转:http://learning.sohu.com/20160215/n437421658.shtml

  2. Storm专题二:Storm Trident API 使用具体解释

    一.概述      Storm Trident中的核心数据模型就是"Stream",也就是说,Storm Trident处理的是Stream.可是实际上Stream是被成批处理的. ...

  3. robotframework接口自动化

    robot framework框架在测试接口上比soapUI好用的多,在此介绍下get方法的HTTP接口,其实这个接口也是把POST数据作为参数进行get请求,使用post 方法也是一样,一共6步就可 ...

  4. CMMI 2,3,4,5级涉及的过程域(PA)介绍

      CMMI中的PA即Process Area的缩写,中文称为过程域.简单的说就是做好一个事情需要的某一个方面,对于软件开发来说,就是做好软件开发需要的某一个方面. CMMI2.3级共有18个过程域( ...

  5. Hadoop之中的一个:Hadoop的安装部署

    说到Hadoop不得不说云计算了,我这里大概说说云计算的概念,事实上百度百科里都有,我仅仅是copy过来,好让我的这篇hadoop博客内容不显得那么单调.骨感.云计算近期今年炒的特别火,我也是个刚開始 ...

  6. 使用 Vagrant 构建开发环境

    使用 Vagrant 构建开发环境 摘要:本文描述了如使用 Vagrant 构建统一的开发环境. 问题 作为开发人员,我们通常面临的问题有: 开发环境需要手工安装配置,这包括操作系统(CentOS.U ...

  7. Node-webkit 介绍

    什么是Node-webkit ? Node-webkit 是Intelproject师rogerwang写的一个基于node.js和chromium的应用程序执行环境,通过node-webkit,我们 ...

  8. 查看和改动MySQL数据库表存储引擎

            要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎: ...

  9. Android AR场景拍照技术实现(有关键源代码)

    ARVR技术交流群:129340649 欢迎增加. AR场景往往给别人留下的印象深刻,假设模型做的炫丽一点,效果将会更好. 那么怎样保存这一美好的情景呢?这篇文章将教你怎样实现AR场景的拍摄以及永久保 ...

  10. scrapy框架的解析

    1,scrapy框架的官网:https://scrapy.org/ 什么是scrapy框架: scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用内框架,非常出名,所谓框架就是一个已经继承 ...