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头牛的...

【POJ 3264】【RMQ 或者线段树】Balanced Lineup 【查询区间内最大最小值的差】

传送门:POJ3264 描述: Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Tota...

POJ 3264 Balanced Lineup (区间最值 RMQ模板/线段树)

题目地址:点击打开链接 区间最值查询,RMQ和线段树都可以。 RMQ代码: #include #include #include #include using namespace std; c...
  • CillyB
  • CillyB
  • 2017年03月15日 23:29
  • 156

poj 3264 Balanced Lineup(RMQ求区间最值)

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 29631   Accepted:...
  • WEYuLi
  • WEYuLi
  • 2013年09月27日 14:11
  • 499

RMQ的ST算法学习小记 Poj 3264 Balanced Lineup

RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j 主要方法及复杂度(处理复杂度和查询复杂度)如下: 1.线...

POJ 3264 Balanced Lineup (RMQ)

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

poj 3264 Balanced Lineup (RMQ))

Balanced Lineup Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit ...

线段树 ST算法 RMQ poj 3264 Balanced Lineup 解题报告

线段树 ST算法 RMQ poj 3264 Balanced Lineup 解题报告

poj 3264 Balanced Lineup (简单 RMQ )

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

poj 3264 Balanced Lineup(RMQ线段树)

http://poj.org/problem?id=3264 题意:输入n个数,有m个询问,每个询问输入l,r,求区间[ l , r ]之间最大数与最小数之差。 思路: 我用的线段树过的,节点增加两个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ-3264 Balanced Lineup【RMQ】
举报原因:
原因补充:

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