Balanced Lineup Poj3264

原创 2018年04月16日 01:17:24
Balanced Lineup
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 60228 Accepted: 28178
Case Time Limit: 2000MS

Description

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.

Input

Line 1: Two space-separated integers, N and Q
Lines 2..N+1: Line i+1 contains a single integer that is the height of cow i 
Lines N+2..N+Q+1: Two integers A and B (1 ≤ A ≤ B ≤ N), representing the range of cows from A to B inclusive.

Output

Lines 1..Q: Each line contains a single integer that is a response to a reply and indicates the difference in height between the tallest and shortest cow in the range.

Sample Input

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

Sample Output

6
3
0

RMQ裸题,RMQ先n*log2(n)预处理,O(1)询问

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 50050;
int a[maxn];
int dpMax[maxn][25];
int dpMin[maxn][25];
void init(int n)   //dp预处理 dp[i][j] 表示以i为起点2^j长度的区间内的最值
{
    for(int i=1; i<=n; i++)dpMax[i][0]=dpMin[i][0]=a[i];
    for(int j=1; (1<<j)<=n; j++)
        for(int i=1; i+(1<<j)-1<=n; i++)
        {
            dpMax[i][j]=max(dpMax[i][j-1],dpMax[i+(1<<(j-1))][j-1]);
            dpMin[i][j]=min(dpMin[i][j-1],dpMin[i+(1<<(j-1))][j-1]);
        }
}
int getK(int len)  //(2^k<=len)得到最大的k
{
    int temp = 1;
    for(int i=0;;i++)
    {
        if(temp>len)
            return i-1;
        temp*=2;
    }
}
int queryMax(int l,int r)   //询问
{
    int k=trunc(getK(r-l+1));
    //int k=trunc(log2(r-l+1));
    return max(dpMax[l][k],dpMax[r-(1<<k)+1][k]);
}
int queryMin(int l,int r)
{
    int k=trunc(getK(r-l+1));
    return min(dpMin[l][k],dpMin[r-(1<<k)+1][k]);
}
int main()
{
    int n,q;
    scanf("%d%d",&n,&q);
    for(int i=1; i<=n; i++)
        scanf("%d",&a[i]);
    init(n);
    while(q--)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        printf("%d\n",queryMax(l,r)-queryMin(l,r));
    }
    return 0;
}

Balanced Lineup(树状数组 POJ3264)

Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 40493 Accep...
  • huayunhualuo
  • huayunhualuo
  • 2015-09-06 11:03:28
  • 231

poj3264 - Balanced Lineup

想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410                              ...
  • wangjian8006
  • wangjian8006
  • 2012-05-21 19:03:14
  • 4196

POJ Gold Balanced Lineup 3274 哈希

Gold Balanced Lineup Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14640   Acce...
  • ky961221
  • ky961221
  • 2016-08-12 08:29:43
  • 249

bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

Description Farmer John's N cows (1
  • lqybzx
  • lqybzx
  • 2014-11-01 14:37:26
  • 1340

POJ 3274 Gold Balanced Lineup

Gold Balanced LineupTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 5164 Accepted: 1631Des...
  • hqd_acm
  • hqd_acm
  • 2010-09-24 08:31:00
  • 2000

POJ3264-Balanced Lineup

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 50471   Accepted:...
  • a664607530
  • a664607530
  • 2017-02-08 13:28:32
  • 145

poj3264(RMQ果题)

我的实习就这么定下来了,下周一就出发了,估计是做数据挖掘的项目了,往研发努力这么久,最后第一份实习竟然是数据挖掘,出自数学系的感觉总是怪怪的,不过也是很高兴的。不过我所属部门还是研发部,用的是pyth...
  • u011044759
  • u011044759
  • 2014-06-05 09:27:22
  • 1108

BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队 线段树

BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队 线段树
  • wzq_QwQ
  • wzq_QwQ
  • 2015-08-18 21:53:55
  • 1057

G - Balanced Lineup POJ 3264 (线段树+区间查询无更新)

G - Balanced Lineup Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit St...
  • u013167299
  • u013167299
  • 2015-04-06 19:04:51
  • 306

Balanced Lineup(POJ-3264)(线段树)

很基础的一道线段树的题,有个地方卡了我好久,我下面的这个代码所求的区间是左闭右开的,所以如果所求区间包括区间端点的话需要在有区间上+1 线段树是一种高效的数据结构,特点是求一个区间里的最小、最大值。 ...
  • weizhuwyzc000
  • weizhuwyzc000
  • 2015-05-03 10:41:44
  • 1712
收藏助手
不良信息举报
您举报文章:Balanced Lineup Poj3264
举报原因:
原因补充:

(最多只允许输入30个字)