poj 3264 Balanced Lineup (线段树模板题)
来源:互联网 发布:linux vi强制保存 编辑:程序博客网 时间:2024/05/18 16:40
Balanced Lineup
Time Limit: 5000MS Memory Limit: 65536KTotal Submissions: 40175 Accepted: 18865Case 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 andQ.
Lines 2..N+1: Line i+1 contains a single integer that is the height of cowi
Lines N+2..N+Q+1: Two integers A and B (1 ≤A ≤ B ≤ N), representing the range of cows from A toB inclusive.
Lines 2..N+1: Line i+1 contains a single integer that is the height of cowi
Lines N+2..N+Q+1: Two integers A and B (1 ≤A ≤ B ≤ N), representing the range of cows from A toB 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 31734251 54 62 2
Sample Output
630我的第一道线段树的题目,这道题也用RMQ解过,here 照着下面的代码学习了一下,原链接 点击打开链接/*POJ 3264 Balanced Lineup题目意思:给定Q(1<=Q<=200000)个数A1,A2,```,AQ,多次求任一区间Ai-Aj中最大数和最小数的差 */#include<stdio.h>#include<algorithm>#include<iostream>using namespace std;#define MAXN 200005#define INF 10000000int nMax,nMin;//记录最大最小值 struct Node{ int l,r;//区间的左右端点 int nMin,nMax;//区间的最小值和最大值 }segTree[MAXN*3];int a[MAXN];void Build(int i,int l,int r)//在结点i上建立区间为(l,r){ segTree[i].l=l; segTree[i].r=r; if(l==r)//叶子结点 { segTree[i].nMin=segTree[i].nMax=a[l]; return; } int mid=(l+r)>>1; Build(i<<1,l,mid); Build(i<<1|1,mid+1,r); segTree[i].nMin=min(segTree[i<<1].nMin,segTree[i<<1|1].nMin); segTree[i].nMax=max(segTree[i<<1].nMax,segTree[i<<1|1].nMax); }void Query(int i,int l,int r)//查询结点i上l-r的最大值和最小值{ if(segTree[i].nMax<=nMax&&segTree[i].nMin>=nMin) return; if(segTree[i].l==l&&segTree[i].r==r) { nMax=max(segTree[i].nMax,nMax); nMin=min(segTree[i].nMin,nMin); return; } int mid=(segTree[i].l+segTree[i].r)>>1; if(r<=mid) Query(i<<1,l,r); else if(l>mid) Query(i<<1|1,l,r); else { Query(i<<1,l,mid); Query(i<<1|1,mid+1,r); } }int main(){ int n,q; int l,r; int i; while(scanf("%d%d",&n,&q)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); Build(1,1,n); for(i=1;i<=q;i++) { scanf("%d%d",&l,&r); nMax=-INF;nMin=INF; Query(1,l,r); printf("%d\n",nMax-nMin); } } return 0; }
0 0
- poj 3264 Balanced Lineup (线段树模板题)
- poj 3264 Balanced Lineup (线段树模板题)
- poj 3264 Balanced Lineup(线段树模板)
- POJ 3264 - Balanced Lineup(线段树)
- Balanced Lineup(POJ-3264)(线段树)
- POJ - 3264 - Balanced Lineup (线段树)
- poj 3264 Balanced Lineup(线段树)
- POJ 3264Balanced Lineup(线段树)
- poj 3264 Balanced Lineup(线段树)
- POJ 3264Balanced Lineup (线段树)
- POJ3264--Balanced Lineup(线段树模板题)
- POJ 3264 Balanced Lineup(线段树点修改 查询最大最小总和 修改 增加/模板)
- POJ 3264 Balanced Lineup (区间最值 RMQ模板/线段树)
- poj 3264 Balanced Lineup rmq/线段树
- POJ 3264 Balanced Lineup RMQ / 线段树
- POJ 3264 Balanced Lineup 线段树基础
- poj 3264 Balanced Lineup[线段树,,水]
- 【线段树】 POJ 3264 Balanced Lineup
- sql语句优化
- linux shell 管道命令(pipe)使用及与shell重定向区别
- hdu 1507 Uncle Tom's Inherited Land* (二分匹配)
- c++继承与派生
- Javaweb的web.xml中<url-pattern>配置
- poj 3264 Balanced Lineup (线段树模板题)
- Java-拾遗:接口
- php性能优化(二)性能测试工具篇
- 机器学习之逻辑回归
- OC基础
- 剑指offer_面试题22_栈的压入、弹出序列(总结规律)
- 清除缓存功能
- android onTouchEvent 左右手势滑动事件处理
- 关于Android Developer Tools Update的问题解决