题目链接:

  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. jq自定义裁剪,代码超级简单,易修改

    1.自定义宽高效果 1.html 代码  index.html <!DOCTYPE html> <html lang="en"> <head> ...

  2. SqlSugar最容易使用的ORM

    SqlSugar官网

  3. Hadoop在window上运行 user=Administrator, access=WRITE, inode="hadoop"

    win7下eclipse中错误的详细描述如下: org.apache.hadoop.security.AccessControlException: org.apache.hadoop.securit ...

  4. Angular结构简单介绍

    在当前项目目录下,使用Angular-CLI生成一个组件:heroes ng generate component heroes 主界面(也就是一个主模块+多个单模块,例如我们创建的heroes(单模 ...

  5. C# Json反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员

    背景今天在使用:C# Json 序列化与反序列化 反序列化的时候出现了以下的错误信息. System.Runtime.Serialization.SerializationException: 数据协 ...

  6. 给工作赋予的新意义——Leo鉴书78

    现代社会学三大奠基人有两位名字里有"马克思",他们都是德国人.当中一位就是写<资本论>的卡尔•马克思,另一位就是<新教伦理与资本主义精神>的作者马克思•韦伯 ...

  7. 【Mongodb教程 第八课 】MongoDB 更新文档

    MongoDB的 update() 和 save() 方法用于更新文档的集合. update()方法更新现有的文档值,而替换现有的文档通过的文件中 save() 方法. MongoDB Update( ...

  8. SonarQube---在具体项目中的使用

    一.简介 SonarQube(简称Sonar)是管理代码质量的开放平台,它可以快速地对代码质量进行分析,并给出合理的解决方案,提高管理效率,保证代码质量. Sonar官网,文档 Sonar Scann ...

  9. 《TCP/IP具体解释》读书笔记(22章)-TCP的坚持定时器

    TCP通过让接收方指明希望从发送方接收的数据字节数(即窗体大小)来进行流量控制. 假设窗体大小为0会发生什么情况呢?这将有效阻止发送方传送数据,直到窗体变为非0为止. ACK的传输并不可靠,也就是说, ...

  10. python3 base64模块代码分析

    #! /usr/bin/env python3 """Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data ...