一段区间的最值问题,用线段树或RMQ皆可。两种代码都贴上:又是空间换时间。。

RMQ 解法:(8168KB 1625ms)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define N 50003 int a[N],dmin[N][],dmax[N][],n; void RMQ_init()
{
int i,j;
for(i=;i<=n;i++)
dmin[i][] = dmax[i][] = a[i];
for(j=;(<<j)<=n;j++)
{
for(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 RMQ(int l,int r)
{
int k = ;
while((<<(k+)) <= r-l+)
k++;
return max(dmax[l][k],dmax[r-(<<k)+][k]) - min(dmin[l][k],dmin[r-(<<k)+][k]);
} int main()
{
int q,i;
while(scanf("%d%d",&n,&q)!=EOF)
{
for(i=;i<=n;i++)
scanf("%d",&a[i]);
RMQ_init();
while(q--)
{
int l,r;
scanf("%d%d",&l,&r);
if(l>r)
swap(l,r);
printf("%d\n",RMQ(l,r));
}
}
return ;
}

线段树解法:(1172KB  2297ms)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define N 50003 struct node
{
int maxi,mini;
}tree[*N]; void pushup(int rt)
{
tree[rt].maxi = max(tree[*rt].maxi,tree[*rt+].maxi);
tree[rt].mini = min(tree[*rt].mini,tree[*rt+].mini);
} void build(int l,int r,int rt)
{
if(l == r)
{
scanf("%d",&tree[rt].maxi);
tree[rt].mini = tree[rt].maxi;
return;
}
int mid = (l+r)/;
build(l,mid,*rt);
build(mid+,r,*rt+);
pushup(rt);
} int query_max(int l,int r,int aa,int bb,int rt)
{
if(aa>r || bb<l)
return -;
if(aa<=l && bb>=r)
return tree[rt].maxi;
int mid = (l+r)/;
return max(query_max(l,mid,aa,bb,*rt),query_max(mid+,r,aa,bb,*rt+));
} int query_min(int l,int r,int aa,int bb,int rt)
{
if(aa>r || bb<l)
return ;
if(aa<=l && bb>=r)
return tree[rt].mini;
int mid = (l+r)/;
return min(query_min(l,mid,aa,bb,*rt),query_min(mid+,r,aa,bb,*rt+));
} int main()
{
int n,q,i;
while(scanf("%d%d",&n,&q)!=EOF)
{
build(,n,);
for(i=;i<=q;i++)
{
int l,r;
scanf("%d%d",&l,&r);
if(l>r)
swap(l,r);
printf("%d\n",query_max(,n,l,r,)-query_min(,n,l,r,));
}
}
return ;
}

POJ 3264 Balanced Lineup -- RMQ或线段树的更多相关文章

  1. POJ - 3264——Balanced Lineup(入门线段树)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 68466   Accepted: 31752 ...

  2. POJ 3264 Balanced Lineup(zkw线段树)

    [题目链接] http://poj.org/problem?id=3264 [题目大意] 求区间最大值和最小值的差值 [题解] 线段树维护区间极值即可 [代码] #include <cstdio ...

  3. Poj 3264 Balanced Lineup RMQ模板

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

  4. poj 3264 Balanced Lineup (RMQ)

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

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

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

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

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

  7. POJ 3264 Balanced Lineup RMQ ST算法

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

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

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

  9. poj 3264 Balanced Lineup(线段树、RMQ)

    题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...

随机推荐

  1. Delphi的几个跨平台小游戏例子。

    Embarcadero开源了几个FireMonkey的小游戏,支持Windows, Android,Ios, MacOS等. 源码地址: https://github.com/EmbarcaderoP ...

  2. velocity merge作为工具类从web上下文和jar加载模板的两种常见情形

    很多时候,处于各种便利性或折衷或者通用性亦或是限制的原因,会借助于模板生成结果,在此介绍两种使用velocity merge的情形,第一种是和spring mvc一样,将模板放在velocityCon ...

  3. C#生成条形码 Code128算法

    条形有很多种,Code128是比较常用的一种,是一种高密度条码, CODE128 码可表示从 ASCII 0 到ASCII 127 共128个字符,故称128码.其中包含了数字.字母和符号字符. Co ...

  4. CSS基础选择器温故-1

    1.基本选择器语法 2.浏览器兼容性:浏览器对基本选择器都是一路绿灯通行,可以放心使用. 3.通配选择器:选择所有元素,也可以选择某个元素下的所有元素 (1)选择所有元素: *{margin: 0;p ...

  5. andriod CheckBox

    <?xml version="1.0" encoding="UTF-8"?> <LinearLayout android:orientatio ...

  6. SharePoint Iframe 报错“此内容不能显示在一个框架中”<续>

    在之前的SharePoint站点iframe引用中,我们遇到过下面的问题,就是其它系统或者不通环境的SharePoint站点,引用SharePoint页面会报错“此内容不能显示在一个框架中”,之前我们 ...

  7. AsyncTask.cancel()的结束问题

    实际项目中有这么一个问题,用户进入详情界面,那么我们就要网络加载数据并展现在UI上,这个加载用线程或者异步. 这里就拿项目中统一用异步任务来获取网络数据把. 用户可能会有这么一个操作,它在一个商品(说 ...

  8. Java.lang.OutOfMemoryError处理

    此错误对于新手做项目的时候经常会发生,而且不容易处理 默认情况下,每个android程序的dailvik虚拟机的最大堆空间大小为16M 当加载的图片太多或图片过大时经常出现OOM问题 而出现此类问题最 ...

  9. 往UISegmentedControl上添加几个控制器

    #import "RootViewController.h" #import "LoginViewController.h" #import "Reg ...

  10. iOS 学习 - 5.UILabel设置行距

    NSMutableAttributedString *arrString =[[NSMutableAttributedString alloc]initWithString:@"asdass ...