POJ 3264 Balanced Lineup(简单RMQ)

http://poj.org/problem?id=3264

题意:

For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows from the milking lineup to play the game. However, for all the cows to have fun they should not differ too much in height.

Farmer John has made a list of Q (1 ≤ Q ≤ 200,000) potential groups of cows and their heights (1 ≤ height ≤ 1,000,000). For each group, he wants your help to determine the difference in height between the shortest and the tallest cow in the group.

分析:

RMQ问题的简单应用。

即给你一个数组,要你输出每次询问区间内的最大值-最小值的差。

AC代码:1641ms

<span style="font-size:18px;">#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=50000+1000;
int dmax[MAXN][20];
int dmin[MAXN][20];
int d[MAXN];
void initMax(int n,int d[])
{for(int i=1;i<=n;i++)dmax[i][0]=d[i];for(int j=1;(1<<j)<=n;j++)for(int i=1;i+(1<<j)-1<=n;i++)dmax[i][j]=max(dmax[i][j-1],dmax[i+(1<<(j-1))][j-1]);
}
int getMax(int L,int R)
{int k=0;while((1<<(k+1))<=R-L+1)k++;return max( dmax[L][k],dmax[R-(1<<k)+1][k] );
}
void initMin(int n,int d[])
{for(int i=1;i<=n;i++)dmin[i][0]=d[i];for(int j=1;(1<<j)<=n;j++)for(int i=1;i+(1<<j)-1<=n;i++)dmin[i][j]=min( dmin[i][j-1],dmin[i+(1<<(j-1))][j-1] );
}
int getMin(int L,int R)
{int k=0;while((1<<(k+1))<=R-L+1)k++;return min( dmin[L][k],dmin[R-(1<<k)+1][k] );
}int main()
{int n,q;while(scanf("%d%d",&n,&q)==2){for(int i=1;i<=n;i++)scanf("%d",&d[i]);initMax(n,d);initMin(n,d);while(q--){int L,R;scanf("%d%d",&L,&R);printf("%d\n",getMax(L,R)-getMin(L,R));}}return 0;
}
</span>

询问区间内最大值-最小值相关推荐

  1. 洛谷 P1440 求m区间内的最小值

    题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...

  2. 询问区间内出现次数最多的数出现的次数

    POJ 3368 Frequent Values(RMQ) http://poj.org/problem?id=3368 题意: 给出一个非降序排列的整数数组a1,a2,...an,你的任务是对于一系 ...

  3. [洛谷P1440]求m区间内的最小值

    题目大意:给你n个数,求出每个数前m位的最小值 题解:单调队列,用一个可以双向弹出的队列来存一串数,满足里面的数具有单调性,我们可以假设它是单调递增的,即求最小的数.那么可以把要插入的这个数与队尾元素 ...

  4. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))...

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给出一 ...

  5. 线段树初见——区间询问与改变最大值

    前言 昨天某B组讲主席树,然后就作死的去听了,也没听懂(因为连线段树都不懂),然后好奇心就去问了一下老师线段树是个蛤,然后这篇博客就诞生了. 正题 首先线段树就是一个可以快速区间改变和询问的东东,实现 ...

  6. leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)

    题目 https://leetcode.com/problems/sliding-window-maximum/ 题解 窗口内最大最小值更新结构,单调栈问题,左神视频讲过,<程序员算法面试指南& ...

  7. 高等数学:第三章 微分中值定理与导数的应用(2)函数单调性 极值 最大值 最小值

    §3.4  函数的单调性 一.从几何图形上看函数的单调性 运行matlab程序gs0303.m,可得到函数与它的导函数在上的图象,从图形上可以观察到: 函数在上是单调减少,在上是单调增加: 其导函数在 ...

  8. ios取两个数之间的随机小数_如果取到小数区间内的任一数字?

    一位粉丝的需求,如果根据左侧的小数区间,返回区间内的随机小数? Excel中存在两个随机函数,一是RANDBETWEEN,但其返回的是随机整数,而不是小数:二是RAND函数,返回0-1之间的随机小数, ...

  9. 均值定理最大值最小值公式_如何理解中值定理?三大微分中值定理的几何意义及其证明介绍。...

    本文是为了下篇文章<三大微分中值定理的应用-经典例题>作基础准备 本文参考谢惠民<数学分析习题课讲义>和裴礼文<数学分析中的典型问题与方法>中的内容.已看过的同学可 ...

最新文章

  1. 数字货币支付能成为主流吗?
  2. java基础-数据类型
  3. 用java调用oracle存储过程总结二
  4. 276. Paint Fence
  5. mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
  6. datetime unix php,PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】...
  7. JAVA基础之自定义容器实现
  8. C#基础(四)--值类型和引用类型,栈和堆的含义
  9. 【c++】字符串的冒泡排序【存疑,待查】
  10. 【深度学习】全连接层or卷积层
  11. 子组件向父组件传值_vue父子组件传值
  12. 【Axure原型分享】评论元件
  13. html5课程总结500字,月考总结500字作文5篇
  14. 记录Android平铺展开效果属性动画
  15. 卡方 matlab,用matlab算卡方值
  16. 踏进字节的那一瞬间,我泪目了,这457天的外包经历值了....
  17. python是全世界最好的语言学校_______是全世界最好的语言
  18. c语言软件开发心得:
  19. Integer Intervals
  20. Pytorch笔记-6

热门文章

  1. python汉字排序规则_根据规则对python中的列表进行排序
  2. python有几种_Python常见的几种算法
  3. testmeshpro合批_TextMesh Pro新手使用手册
  4. python基础教程-北大学霸自学这套Python教程,7天开发12款游戏,堪称宝藏教程
  5. 自学python好找工作么-学完Python好找工作吗?为什么有人学完找不到工作?
  6. 零基础学python还是c语言-C语言是学python的基础吗?
  7. 聚焦2016:关于语音识别、图像识别及大数据
  8. linux下mysql连接_Linux下MySQL C++连接操作
  9. 【王道计组笔记】定点数编码方式(原码,补码,反码)
  10. 【python 笔记】赋值语句和基本输入输出