POJ-3264 Balanced Lineup(区间最值,线段树,RMQ)
http://poj.org/problem?id=3264
Time Limit: 5000MS Memory Limit: 65536K
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
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
Sample Input
Sample Output
Source
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- #include <string>
- #include <math.h>
- #include <algorithm>
- #include <vector>
- #include <queue>
- #include <set>
- #include <map>
- #include <math.h>
- const int INF=0x3f3f3f3f;
- typedef long long LL;
- const int mod=1e9+;
- //const double PI=acos(-1);
- const int maxn=1e5+;
- using namespace std;
- //ios::sync_with_stdio(false);
- // cin.tie(NULL);
- int n,q;
- struct node
- {
- int l;
- int r;
- int MAX;
- int MIN;
- }SegTree[<<];
- void PushUp(int rt)
- {
- SegTree[rt].MAX=max(SegTree[rt<<].MAX,SegTree[rt<<|].MAX);
- SegTree[rt].MIN=min(SegTree[rt<<].MIN,SegTree[rt<<|].MIN);
- }
- void Build(int l,int r,int rt)
- {
- SegTree[rt].l=l;
- SegTree[rt].r=r;
- if(l==r)
- {
- scanf("%d",&SegTree[rt].MAX);
- SegTree[rt].MIN=SegTree[rt].MAX;
- return;
- }
- int mid=(l+r)>>;
- Build(l,mid,rt<<);
- Build(mid+,r,rt<<|);
- PushUp(rt);
- }
- int Query_MAX(int L,int R,int rt)
- {
- int l=SegTree[rt].l;
- int r=SegTree[rt].r;
- if(L<=l&&R>=r)//一次也没有被涂过
- {
- return SegTree[rt].MAX;
- }
- int MAX=;
- int mid=(l+r)>>;
- if(L<=mid)
- MAX=max(MAX,Query_MAX(L,R,rt<<));
- if(R>mid)
- MAX=max(MAX,Query_MAX(L,R,rt<<|));
- return MAX;
- }
- int Query_MIN(int L,int R,int rt)
- {
- int l=SegTree[rt].l;
- int r=SegTree[rt].r;
- if(L<=l&&R>=r)//一次也没有被涂过
- {
- return SegTree[rt].MIN;
- }
- int MIN=INF;
- int mid=(l+r)>>;
- if(L<=mid)
- MIN=min(MIN,Query_MIN(L,R,rt<<));
- if(R>mid)
- MIN=min(MIN,Query_MIN(L,R,rt<<|));
- return MIN;
- }
- int main()
- {
- scanf("%d %d",&n,&q);
- Build(,n,);
- for(int i=;i<=q;i++)
- {
- int a,b;
- scanf("%d %d",&a,&b);
- printf("%d\n",Query_MAX(a,b,)-Query_MIN(a,b,));
- }
- return ;
- }
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<climits>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- const int N = ;
- int FMAX[N][], FMIN[N][];
- void RMQ(int n)
- {
- for(int j = ; j != ; ++j)
- {
- for(int i = ; i <= n; ++i)
- {
- if(i + ( << j) - <= n)
- {
- FMAX[i][j] = max(FMAX[i][j - ], FMAX[i + ( << (j - ))][j - ]);
- FMIN[i][j] = min(FMIN[i][j - ], FMIN[i + ( << (j - ))][j - ]);
- }
- }
- }
- }
- int main()
- {
- int num, query;
- int a, b;
- while(scanf("%d %d", &num, &query) != EOF)
- {
- for(int i = ; i <= num; ++i)
- {
- scanf("%d", &FMAX[i][]);
- FMIN[i][] = FMAX[i][];
- }
- 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 - ( << k) + ][k]);
- int minsum = min(FMIN[a][k], FMIN[b - ( << k) + ][k]);
- printf("%d\n", maxsum - minsum);
- }
- }
- return ;
- }
POJ-3264 Balanced Lineup(区间最值,线段树,RMQ)的更多相关文章
- POJ 3264 Balanced Lineup 区间最值
POJ3264 比较裸的区间最值问题.用线段树或者ST表都可以.此处我们用ST表解决. ST表建表方法采用动态规划的方法, ST[I][J]表示数组从第I位到第 I+2^J-1 位的最值,用二分的思想 ...
- poj 3264 Balanced Lineup 区间极值RMQ
题目链接:http://poj.org/problem?id=3264 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) alw ...
- POJ 3264.Balanced Lineup-结构体版线段树(区间查询最值)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53721 Accepted: 25244 ...
- POJ 3264 Balanced Lineup(模板题)【RMQ】
<题目链接> 题目大意: 给定一段序列,进行q次询问,输出每次询问区间的最大值与最小值之差. 解题分析: RMQ模板题,用ST表求解,ST表用了倍增的原理. #include <cs ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
- POJ - 3264 Balanced Lineup (RMQ问题求区间最值)
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
- POJ 3264 Balanced Lineup 【线段树/区间最值差】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 62103 Accepted: 29005 Cas ...
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53703 Accepted: 25237 ...
- POJ - 3264——Balanced Lineup(入门线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 68466 Accepted: 31752 ...
随机推荐
- DevOps专题|Packer使用教程
什么是Packer 简单介绍一下自己 Packer 是一个轻量命令行工具, 能在几乎所有主流的操作系统上运行. 在给定一份配置文件的情况下, Packer 能为多种系统架构创建云主机镜像.同时 Pac ...
- vue组件化应用构建
组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型.独立和通常可复用的组件构建大型应用.仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树: 在 Vue 里,一个组件本质上是 ...
- spring boot2 运行环境
1.springboot个版本系统需求 spring boot maven jdk 内置tomcat 内置jetty servlet 2.0.x 3.2+ 8或9 8.5(3.1) 9.4(3.1) ...
- VS2013的工程移植到VS2008
VS2013的工程完成后,用VS2008创建一个名称一样的工程(大小写也一样). 具体过程参考http://blog.csdn.net/sz76211822/article/details/42775 ...
- HyperLedger Cello学习笔记
HyperLedger Cello学习笔记 转载请注明出处:HyperLedger Cello学习笔记 概述 Hyperledger Cello是Hyperledger下的一个子项目,其主要功能如下: ...
- Navicat Premium 12.0.18 安装与激活
Navicat Premium 12.0.18中文版 百度云链接:https://pan.baidu.com/s/1HHOOlQbbWAL-MlI908n4MQ 提取码:k9w6 1.下载好后双击运行 ...
- gcc编译出现:error: invalid operands to binary & (have ‘char *’ and ‘int *’)
/************************************************************************* > File Name: ptr_varia ...
- 面试准备 HTTP协议
http协议的主要特点 简单快速 //某个资源是固定的 (统一资源符)UII 灵活 //http头部有个数据类型,完成不同数据类型的传输 无连接 //链接一次就会断开 无状态 //客户端和服务端 ...
- JAVA 算法练习(一)
用java写了几道编程题目,分享给大家 语法和C语言几乎一样,不懂 java 会 c 也可以看明白的. 最大连续数列和 题目说明 对于一个有正有负的整数数组,请找出总和最大的连续数列.给定一个int数 ...
- 刷题42. Trapping Rain Water
一.题目说明 题目是42. Trapping Rain Water,翻译起来就是"接雨水".给n个非负正数代表高度,每个正数宽度为1,让计算能多少雨水.题目难度是Hard 二.我的 ...