POJ-3264 Balanced Lineup【RMQ】

原创 2012年03月28日 09:01:13

题目链接:http://poj.org/problem?id=3264

题目大意:

一个农夫有N头牛,每头牛的高度不同,我们需要找出最高的牛和最低的牛的高度差。

解题思路:

我是用RMQ写的。

N为50000,Q为200000,如果我们暴力的话,需要50000*200000=10000000000,需要25s左右.所以我们需要高效的算法,而RMQ正好解决的就是区间最值问题,复杂度为nlogn,这样就可以了。

另外还可以用线段树,因为线段树的别名就是区间树。segment tree


代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<climits>
#include<cmath>
#include<algorithm>
using namespace std;

const int N = 50005;
int FMAX[N][20], FMIN[N][20];

void RMQ(int n)
{
	for(int j = 1; j != 20; ++j)
	{
		for(int i = 1; i <= n; ++i)
		{
			if(i + (1 << j) - 1 <= n)
			{
				FMAX[i][j] = max(FMAX[i][j - 1], FMAX[i + (1 << (j - 1))][j - 1]);
				FMIN[i][j] = min(FMIN[i][j - 1], FMIN[i + (1 << (j - 1))][j - 1]);
			}
		}
	}
}

int main()
{
	int num, query;
	int a, b;
	while(scanf("%d %d", &num, &query) != EOF)
	{
		for(int i = 1; i <= num; ++i)
		{
			scanf("%d", &FMAX[i][0]);
			FMIN[i][0] = FMAX[i][0];
		}
		RMQ(num);
		while(query--)
		{
			scanf("%d%d", &a, &b);
			int k = (int)(log(b - a + 1.0) / log(2.0));
			int maxsum = max(FMAX[a][k], FMAX[b - (1 << k) + 1][k]);
			int minsum = min(FMIN[a][k], FMIN[b - (1 << k) + 1][k]);
			printf("%d\n", maxsum - minsum);
		}
	}
	return 0;
}


Balanced Lineup (基本线段树)

点击打开链接 1、题目大意: 有N头牛,给定N头牛的高度,输出给定区间内最高牛的高度与最低牛的高度差   输入:第一行两个数N、Q分别代表N头牛,Q个操作区间 接下来输入N个数,代表N头牛的...
  • sdjzping
  • sdjzping
  • 2013年01月29日 21:13
  • 731

Balanced Lineup(线段树—指针实现)

线段树这一类树状结构一般可以用两种形式来实现—数组和指针。 下面学习了一下别人的指针实现的线段树。 和数组实现的一样分为三步:建树,添加值,查询。 #include #include #inclu...
  • weizhuwyzc000
  • weizhuwyzc000
  • 2015年05月09日 09:49
  • 1389

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
  • 225

POJ-3264 Balanced Lineup【RMQ】

题目链接:http://poj.org/problem?id=3264 题目大意: 一个农夫有N头牛,每头牛的高度不同,我们需要找出最高的牛和最低的牛的高度差。 解题思路: 我是用RMQ写的。...
  • niushuai666
  • niushuai666
  • 2012年03月28日 09:01
  • 2745

POJ-3264 Balanced Lineup【RMQ】

转载地址:http://blog.csdn.net/niushuai666/article/details/7401403
  • happy309best
  • happy309best
  • 2014年11月08日 17:23
  • 126

POJ-3264 Balanced Lineup(rmq模板题)

For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d...
  • yo_bc
  • yo_bc
  • 2017年09月15日 13:06
  • 81

RMQ---Balanced Lineup

RMQ是在给定的一个区间内最值查询的一个算法,主要包括处理和查询两个部分,在预处理中,用的是动态规划去处理,首先设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值,...
  • qq_34826781
  • qq_34826781
  • 2017年01月21日 23:47
  • 86

POJ 3274 Gold Balanced Lineup

说实在话对于英文渣渣的我读题真的很难。 下面是题目大意,对提供者表示感谢。 代码操作如下: 1、先将十进制数转换成二进制数记录保存。 2、然后逐行累加,得出到某只牛时某种特征出现了几次。 3、每行...
  • lin375691011
  • lin375691011
  • 2013年08月15日 10:21
  • 4571

POJ-3264 Balanced Lineup

原题链接 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 44438   Ac...
  • qq_26122039
  • qq_26122039
  • 2016年06月15日 21:46
  • 83

poj-3264 Balanced Lineup

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 45310 ...
  • haut_ykc
  • haut_ykc
  • 2016年07月18日 21:12
  • 183
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ-3264 Balanced Lineup【RMQ】
举报原因:
原因补充:

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