题目地址:http://poj.org/problem?id=3264

Sample Input

  1. 6 3
  2. 1
  3. 7
  4. 3
  5. 4
  6. 2
  7. 5
  8. 1 5
  9. 4 6
  10. 2 2

Sample Output

  1. 6
  2. 3
  3. 0
    分析:标准的模板题,可以用线段树写,但用RMQ-ST来写代码比较短。
    每次输出区间【L, R】内最大值和最小值的差是多少。
    注意一个地方,代码里面用到了log2()函数,但是我用包含<math.h>和<cmath>头文件的代码以C++的方式提交到POJ反馈是编译错误。
    改成g++提交才AC了。(注意不一定是用log2(), 采用换底公式的写法,换成log()函数)
    代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <math.h>
  6. #include <cmath>
  7. #include <iostream>
  8. #include <string>
  9. #include <queue>
  10. #include <stack>
  11. #include <vector>
  12. #include <algorithm>
  13. #define N 100000+100
  14.  
  15. using namespace std;
  16.  
  17. int n, m;
  18. int f[N];
  19. //poj 3264
  20. int st_max[N][22];
  21. int st_min[N][22];
  22.  
  23. void ST_prepare()
  24. {
  25. int i, j;
  26. for(i=1; i<=n; i++){
  27. st_min[i][0]=f[i];
  28. st_max[i][0]=f[i];
  29. }
  30.  
  31. for(j=1; (1<<j)<=n; j++){
  32. for(i=1; i+(1<<j)-1<=n; i++){
  33. st_min[i][j]=min(st_min[i][j-1], st_min[i+(1<<(j-1))][j-1] );
  34. st_max[i][j]=max(st_max[i][j-1], st_max[i+(1<<(j-1))][j-1] );
  35. } //一开始写只写了求最小值的,内层for循环没写括号, 导致后来添加上求最大值后,运行就是不对
  36. } //预处理 //因为疏忽 内层循环执行两个命令却没有大括号,,,debug半天,以后切记
  37. }
  38.  
  39. int RMQ_ST_min(int li, int ri)
  40. {
  41. int k=log2(ri-li+1);
  42. return min(st_min[li][k], st_min[ri-(1<<k)+1][k] );
  43. }
  44. int RMQ_ST_max(int li, int ri)
  45. {
  46. int k=log2(ri-li+1);
  47. return max(st_max[li][k], st_max[ri-(1<<k)+1][k] );
  48. }
  49. int main()
  50. {
  51. int i, j;
  52. scanf("%d %d", &n, &m);
  53. for(i=1; i<=n; i++)
  54. scanf("%d", &f[i]); //建立数组
  55.  
  56. ST_prepare();
  57.  
  58. int li, ri;
  59. while(m--){
  60. scanf("%d %d", &li, &ri);
  61. //printf("%d---%d", RMQ_ST_max(li, ri), RMQ_ST_min(li, ri) );
  62.  
  63. printf("%d\n", RMQ_ST_max(li, ri)-RMQ_ST_min(li, ri) );
  64. }
  65. return 0;
  66. }
  1.  

poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】的更多相关文章

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

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

  2. POJ 3264 Balanced Lineup RMQ ST算法

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

  3. Poj 3264 Balanced Lineup RMQ模板

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

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

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

  5. poj 3264 Balanced Lineup (RMQ)

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

  6. POJ 3264 Balanced Lineup 【线段树/区间最值差】

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 62103 Accepted: 29005 Cas ...

  7. POJ 3264 Balanced Lineup (线段树查找最大最小值)

    http://poj.org/problem?id=3264 题意:给你一个长度为n的序列a[N] (1 ≤ N ≤ 50000),询问Q(1 ≤ Q ≤ 200000) 次,每次输出[L, R]区间 ...

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

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

  9. POJ 3264 Balanced Lineup(ST模板)

    链接:http://poj.org/problem?id=3264 题意:给n个数,求一段区间L,R的最大值 - 最小值,Q次询问 思路:ST表模板,预处理区间最值,O(1)复杂度询问 AC代码: # ...

随机推荐

  1. ps选框工具全解

    我们每次选择工具的时候,ps上面都会变成特定的选项,比如说下面这些: 比如说选区工具的话就分为新选区.添加选区.交叉选区之类的,这些都是需要在实战中练习的. 不单单是选区有这个工具,其他的也有这个功能 ...

  2. keil 中的一些设置

    option for target 'target 1' 中: 第3选项output: select folder for objects :此选项是选择编译时产生的以希望文件,点击选择路径,不然这些 ...

  3. Hadoop-2.6.0上调用C的API实现相似云盘的功能

    Hadoop-2.6.0上调用C的API实现类似云盘的功能(上传.下载.删除,重命名) 測试系统:CentOS6.6, hadoop-2.6.0 本次測试是调用hadoop下的C的API来訪问HDFS ...

  4. jeecms搜索结果排序-二次开发

    jeecms搜索用的是apache Lucene,要实现此功能得先去学习它. 直接上代码 package com.jeecms.cms.lucene; import java.io.IOExcepti ...

  5. File类的源码学习

    File类是Java中IO部分的一个类,用于表示文件或者目录的.关于File类有很多的常规操作这里就不介绍了,来看一下不常规的东西. File英文意思是文件,但是它也可以用来表示目录,文件的概念还是比 ...

  6. (2) yum源配置-163

    1.获取yum源文件 登录http://mirrors.163.com/.help/centos.html,查看CentOS6的链接地址(右键点击“CentOS6”,选择复制链接地址),链接地址为:h ...

  7. 从零开始学android -- Service

    废话不多说了,Service是四大组件之一,是一个后台处理长时间运行在主线程不需要依赖ui界面显示的应用组件,切记不能在service中做耗时操作,会阻塞主线程,要做也要在service中开个子线程做 ...

  8. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期

    JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...

  9. 几种session存储方式比较

    原文: http://blog.sina.com.cn/s/blog_495697e6010143tj.html 集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的 ...

  10. 转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS

      目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 ...