点我看题目

题意 :N头奶牛,Q次询问,然后给你每一头奶牛的身高,每一次询问都给你两个数,x y,代表着从x位置上的奶牛到y位置上的奶牛身高最高的和最矮的相差多少。

思路 : 刚好符合RMQ的那个求区间最大最小值,所以用RMQ还是很方便的。就是一个RMQ的模板题,基本上书上网上都有。

RMQ基础知识

RMQ算法举例

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream> const int maxn = ;
int maxsum[maxn][],minsum[maxn][] ;
int a[maxn] ;
int N,Q ; using namespace std ; void Init()
{
for(int i = ; i <= N ; i++)
{
scanf("%d",&a[i]) ;
maxsum[i][] = a[i] ;
minsum[i][] = a[i] ;
}
} void RMQ()
{
int k = (int )(log((double)N)/log(2.0)) ;
for(int j = ; j <= k ; j++)
for(int i = ; i <= N ; i++)
if(i + ( << j) - <= N )
{
maxsum[i][j] = max(maxsum[i][j-],maxsum[i + ( << (j-))][j-]) ;
minsum[i][j] = min(minsum[i][j-],minsum[i + ( << (j-))][j-]) ;
}
}
int main()
{
while(~scanf("%d %d",&N,&Q))
{
Init() ;
RMQ() ;
int x,y ;
for(int i = ; i <= Q ; i++)
{
scanf("%d %d",&x,&y) ;
int k = (int)(log((double)(y-x+))/log(2.0)) ;
int minn = min(minsum[x][k],minsum[y-(<<k)+][k]) ;
int maxx = max(maxsum[x][k],maxsum[y-(<<k)+][k]) ;
printf("%d\n",maxx-minn) ;
}
}
return ;
}

线段树写法 :

 //POJ 3264
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std ; //int maxx,minn ;
int p[ * ],q[ * ]; void pushup(int rt)
{
p[rt] = max(p[rt << ],p[rt << | ]) ;
q[rt] = min(q[rt << ],q[rt << | ]) ;
}
void build(int l,int r,int rt)
{
int a ;
if(l == r)
{
scanf("%d",&a) ;
p[rt] = a ;
q[rt] = a ;
return ;
}
int mid = (l+r) >> ;
build(l,mid,rt << ) ;
build(mid+,r,rt << | ) ;
pushup(rt) ;
}
int query(int L,int R,int l,int r,int rt)
{
int maxx = - ;
if(l >= L && r <= R)
{
return p[rt] ;
}
int mid = (l+r) >> ;
if(mid >= L)
maxx = max(maxx,query(L,R,l,mid,rt << ) ) ;
if(mid < R)
maxx = max(maxx,query(L,R,mid+,r,rt << | )) ;
return maxx ;
}
int querz(int L,int R,int l,int r,int rt)
{
int minn = ;
if(l >= L && r <= R)
{
return q[rt] ;
}
int mid = (l+r) >> ;
if(mid >= L)
minn = min(minn,querz(L,R,l,mid,rt << ) ) ;
if(mid < R)
minn = min(minn,querz(L,R,mid+,r,rt << | ) );
return minn ;
}
int main()
{
int N,M ;
while(~scanf("%d %d",&N,&M))
{
build(,N,) ;
int a,b ;
for(int i = ; i < M ; i++)
{
scanf("%d %d",&a,&b) ;
// printf("%d %d*\n",query(a,b,1,N,1),querz(a,b,1,N,1)) ;
printf("%d\n",query(a,b,,N,) - querz(a,b,,N,) ) ;
}
}
return ;
}

POJ 3264 Balanced Lineup(RMQ)的更多相关文章

  1. poj 3264 Balanced Lineup(RMQ裸题)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 43168   Accepted: 20276 ...

  2. POJ 题目3264 Balanced Lineup(RMQ)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 39046   Accepted: 18291 ...

  3. POJ 3264 Balanced Lineup(RMQ_ST)

    题目链接:http://poj.org/problem? id=3264 Description For the daily milking, Farmer John's N cows (1 ≤ N  ...

  4. poj 3264:Balanced Lineup(线段树,经典题)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 32820   Accepted: 15447 ...

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

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

  6. POJ 3264 Balanced Lineup(ST模板)

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

  7. poj 3264 Balanced Lineup (线段树)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 42489   Accepted: 20000 ...

  8. Balanced Lineup(RMQ)

    原题传送门 就是裸RMQ啊.. 求区间最大值和区间最小值,一看就像RMQ,当然线段树貌似也可以. 至于算法嘛.自己学~(好吧,放个传送门...) 然后就是最后把maxsum-minsum就好啦233~ ...

  9. POJ 3264 Balanced Lineup (线段树)

    Balanced Lineup For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the s ...

随机推荐

  1. requirejs 定义模块中含有prototype

    因为我对requirejs不熟悉,不清楚如何定义带有prototype的模块, 在看了:https://gist.github.com/jonnyreeves/2474026 的demo之后,就明白了 ...

  2. C# 3.0 基本框架

    使用TimeZoneInfo: static void Main() { TimeZoneInfo wa = TimeZoneInfo.FindSystemTimeZoneById ("W. ...

  3. 在shell的if条件里,判断 a>0 且 (b>0 或 c>0) ,如何编写?

    if [ $b -gt 0 -o $c -gt 0 -a $a -gt 0 ]; then.fi对shell中的关系运算符说明如下:-gt 表示greater than,大于-lt 表示less th ...

  4. CPrintDialog 构造函数参数详解

    CPrintDialog 构造Windows打印或打印设置对话框(两者不同)     打印对话框                                                     ...

  5. iOS开发——百度云推送

    由于公司项目是集成的极光推送,详见下一篇博客. 集成百度推送大体相当,最好都参考官方文档集成,官方文档或官方网站教程是最好的博客. 百度Push服务SDK用户手册(iOS版) http://push. ...

  6. C# ACM poj1006

    中国剩余定理 public static void acm1006(int a, int b, int c, int d) { * ; * ; * ; * * ; ) * z; ) * y; ) * ...

  7. SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

    用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...

  8. POJ 1099 Square Ice

    Square Ice Description Square Ice is a two-dimensional arrangement of water molecules H2O, with oxyg ...

  9. TreeMap 红黑树实现

    TreeMap 是一个有序的key-value集合,它是通过 红黑树 实现的. TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合. TreeMap 实现了 ...

  10. Normalize.css:优化重置CSS默认属性

    Normalize.css:优化重置CSS默认属性 官方网站:http://necolas.github.io/normalize.css/ 项目仓库:https://github.com/necol ...