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

Sample Input

6 3
1
7
3
4
2
5
1 5
4 6
2 2

Sample Output

6
3
0
分析:标准的模板题,可以用线段树写,但用RMQ-ST来写代码比较短。
每次输出区间【L, R】内最大值和最小值的差是多少。
注意一个地方,代码里面用到了log2()函数,但是我用包含<math.h>和<cmath>头文件的代码以C++的方式提交到POJ反馈是编译错误。
改成g++提交才AC了。(注意不一定是用log2(), 采用换底公式的写法,换成log()函数)
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <cmath>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#define N 100000+100 using namespace std; int n, m;
int f[N];
//poj 3264
int st_max[N][22];
int st_min[N][22]; void ST_prepare()
{
int i, j;
for(i=1; i<=n; i++){
st_min[i][0]=f[i];
st_max[i][0]=f[i];
} for(j=1; (1<<j)<=n; j++){
for(i=1; i+(1<<j)-1<=n; i++){
st_min[i][j]=min(st_min[i][j-1], st_min[i+(1<<(j-1))][j-1] );
st_max[i][j]=max(st_max[i][j-1], st_max[i+(1<<(j-1))][j-1] );
} //一开始写只写了求最小值的,内层for循环没写括号, 导致后来添加上求最大值后,运行就是不对
} //预处理 //因为疏忽 内层循环执行两个命令却没有大括号,,,debug半天,以后切记
} int RMQ_ST_min(int li, int ri)
{
int k=log2(ri-li+1);
return min(st_min[li][k], st_min[ri-(1<<k)+1][k] );
}
int RMQ_ST_max(int li, int ri)
{
int k=log2(ri-li+1);
return max(st_max[li][k], st_max[ri-(1<<k)+1][k] );
}
int main()
{
int i, j;
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++)
scanf("%d", &f[i]); //建立数组 ST_prepare(); int li, ri;
while(m--){
scanf("%d %d", &li, &ri);
//printf("%d---%d", RMQ_ST_max(li, ri), RMQ_ST_min(li, ri) ); printf("%d\n", RMQ_ST_max(li, ri)-RMQ_ST_min(li, ri) );
}
return 0;
}
												

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. java之UDP(datagramsocket,datagramPacket)实例

    import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import ...

  2. jquery的on()

    定义和用法 on() 方法在被选元素及子元素上添加一个或多个事件处理程序. 自 jQuery 版本 1.7 起,on() 方法是 bind().live() 和 delegate() 方法的新的替代品 ...

  3. lua学习笔记(五)

    语句     赋值         多重赋值         a, b, c, d = 1, 2, 3, 4         a, b, c = 1, 2         assert(c == ni ...

  4. LNMP环境搭建之php安装,wordpress博客搭建

    LNMP环境搭建之php安装,wordpress博客搭建 一.介绍: 1.什么是CGI CGI全称是"通用网关接口"(Common Gateway Interface),HTTP服 ...

  5. centos 6.9使用Rsync+Inotify-tools实现数据实时同步

    centos 6.9使用Rsync+Inotify-tools实现数据实时同步 说明: 操作系统:CentOS 6.9 源服务器:192.168.1.222 备份服务器:192.168.1.1.233 ...

  6. pip安装错误,用镜像

    Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'Connec ...

  7. 把flask部署到服务器

    1.新建一个wsgi.py文件 # -*- coding:utf-8 -*- import sys from os.path import abspath from os.path import di ...

  8. git add . git add -u git add -A命令区别图解

    git版本不同会有所区别: Git Version 1.x:  Git Version 2.x:  git add .  修改(modified)以及新文件(new),但不包括被删除的文件. git ...

  9. 二级导航内容均分--jquery

    这个是去年做过的一个项目中的算法,个人感觉还可以,所以拿出来分享下. 背景:头部导航二级导航有些内容太长,一列的话太过难看,就要分成两列,要做到按块尽量均分,排列顺序没有限制. 原理: 1.把各个二级 ...

  10. Pexpect--example--hive.py解读

    python version 2.6.6 ; pexpect 2.3 login方法解读: def login (args, cli_username=None, cli_password=None) ...