POJ - 3264 - Balanced Lineup (线段树)
2015-07-27 09:42
417 查看
Balanced Lineup
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
Sample Output
Source
USACO 2007 January Silver
简单线段树,维护一个区间最大值和最小值即可
AC代码:
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 39060 | Accepted: 18299 | |
Case Time Limit: 2000MS |
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
Source
USACO 2007 January Silver
简单线段树,维护一个区间最大值和最小值即可
AC代码:
#include <map> #include <set> #include <cmath> #include <deque> #include <queue> #include <stack> #include <cstdio> #include <cctype> #include <string> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define INF 0x7fffffff using namespace std; const int maxn = 50005; int n, q; int Max[maxn << 2]; int Min[maxn << 2]; void build(int l, int r, int rt) { if(l == r) { scanf("%d", &Max[rt]); Min[rt] = Max[rt]; return; } int mid = (l + r) >> 1; build(l, mid, rt << 1); build(mid + 1, r, rt << 1 | 1); Max[rt] = max(Max[rt << 1], Max[rt << 1 | 1]); Min[rt] = min(Min[rt << 1], Min[rt << 1 | 1]); } int query1(int L, int R, int l, int r, int rt) { if(L <= l && r <= R) { return Max[rt]; } int ret = 0; int mid = (l + r) >> 1; if(L <= mid) ret = max(ret, query1(L, R, l, mid, rt << 1)); if(R >= mid + 1) ret = max(ret, query1(L, R, mid + 1, r, rt << 1 | 1)); return ret; } int query2(int L, int R, int l, int r, int rt) { if(L <= l && r <= R) { return Min[rt]; } int ret = INF; int mid = (l + r) >> 1; if(L <= mid) ret = min(ret, query2(L, R, l, mid, rt << 1)); if(R >= mid + 1) ret = min(ret, query2(L, R, mid + 1, r, rt << 1 | 1)); return ret; } int main() { while(scanf("%d %d", &n, &q) != EOF) { build(1, n, 1); for(int i = 0; i < q; i ++) { int a, b; scanf("%d %d", &a, &b); int ma = query1(a, b, 1, n, 1); int mi = query2(a, b, 1, n, 1); printf("%d\n", ma - mi); } } return 0; }
相关文章推荐
- 一个空格引起的访问404问题
- SQL语句的解析顺序
- JS写的排序算法演示
- NYOJ 92 图像有用区域(BFS)
- createjs初学-制作一个简单的TextButton
- c++ const 成员函数
- 提高iOS开发效率的方法和工具
- 带你入门带你飞Ⅰ 使用Mocha + Chai + Sinon单元测试Node.js
- nginx结合tomcat使用
- ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView
- linux ssh配置
- HDU 1024 Max Sum Plus Plus(dp)
- 如何让CodeBlocks支持C99
- Ext 的Ajax 请求,添加mask 等待效果
- linux 下查找文件和字符串命令 find grep
- AndroidJNI.SetCharField 设置字符域
- C语言static 详解
- 思维导图之----javascript正则表达式知识树
- Eclipse中Project Explorer 和 Package Explorer有什么区别
- poj1061 青蛙的约会 (数论,扩展欧几里得)