Balanced Lineup
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 38942   Accepted: 18247
Case 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
BN), 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 3
1
7
3
4
2
5
1 5
4 6
2 2

Sample Output

6
3
0

Source

USACO 2007 January Silver



题目大意:在一定区间内给定一些数。要求求出在某一区间内最大值和最小值的差。

线段树的题目。对于这道题目,既然是求最大值和最小值的差,那么必定要在区间里面存放最大值和最小值。同一时候这道题目仅仅是单纯的要求查询区间内的差值,不须要进行更新。

#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
#define min(a,b) a<b? a:b
#define INF 99999999
#define N 50005
struct tree{
int l,r,maxi,mini;
int mid(){
return l+r>>1;
}
}tree[N<<2];
int ma=-INF,mi=INF;
void build(int l,int r,int root)
{
tree[root].l=l;
tree[root].r=r;
tree[root].maxi=-INF;
tree[root].mini=INF; //初始化最大最小值
if(l==r){ return;
}
int mid=l+r>>1;
build(l,mid,root<<1);
build(mid+1,r,root<<1|1);
}
void update(int i,int z,int root)
{ if(tree[root].l==tree[root].r){
tree[root].mini=tree[root].maxi=z;
return;
}
tree[root].maxi=max(tree[root].maxi,z);
tree[root].mini=min(tree[root].mini,z); //每次都更新最大和最小值
if(i<=tree[root].mid())update(i,z,root<<1); //这里将i下面的节点所有更新。 而i与mid 是有关系的。
else update(i,z,root<<1|1);
}
void Query(int l,int r,int root)
{
if(tree[root].mini>=mi&&tree[root].maxi<=ma)return;
if(l==tree[root].l&&r==tree[root].r){
mi=min(mi,tree[root].mini);
ma=max(ma,tree[root].maxi);
return;
}
int mid=tree[root].l+tree[root].r>>1;
if(r<=mid){
Query(l,r,root<<1);
}
else if(l>mid){
Query(l,r,root<<1|1);
}
else {
Query(l,mid,root<<1);
Query(mid+1,r,root<<1|1);
}
return ;
}
int main()
{
int n,Q,cow[200005],a,b;
int i,j,k;
while(scanf("%d%d",&n,&Q)!=EOF)
{
build(1,n,1);
for(i=1;i<=n;i++)
{
scanf("%d",&cow[i]);
update(i,cow[i],1); //对于第i个数字进行插入
} while(Q--)
{
scanf("%d%d",&a,&b);
ma=-INF;
mi=INF;
Query(a,b,1);
printf("%d\n",ma-mi);
}
}
return 0;
}

poj 3246 Balanced Lineup(线段树)的更多相关文章

  1. [POJ] 3264 Balanced Lineup [线段树]

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

  2. poj 3264 Balanced Lineup(线段树、RMQ)

    题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...

  3. POJ 3264 Balanced Lineup 线段树RMQ

    http://poj.org/problem?id=3264 题目大意: 给定N个数,还有Q个询问,求每个询问中给定的区间[a,b]中最大值和最小值之差. 思路: 依旧是线段树水题~ #include ...

  4. POJ 3264 Balanced Lineup 线段树 第三题

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

  5. POJ 3264 Balanced Lineup (线段树)

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

  6. POJ - 3264 Balanced Lineup 线段树解RMQ

    这个题目是一个典型的RMQ问题,给定一个整数序列,1~N,然后进行Q次询问,每次给定两个整数A,B,(1<=A<=B<=N),求给定的范围内,最大和最小值之差. 解法一:这个是最初的 ...

  7. Poj 3246 Balanced Lineup(线段树基础)

    依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...

  8. 【POJ】3264 Balanced Lineup ——线段树 区间最值

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

  9. BZOJ-1699 Balanced Lineup 线段树区间最大差值

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 41548 Accepted: 19514 Cas ...

随机推荐

  1. C#/Sqlite-单机Window 程序 sqlite 数据库实现

    数据库分析和选择 Excel 文件 做数据源 限制性比较强,且不适合查询,分析 等操作 Access 数据库 Access 管理数据界面和功能不强 mysql 和sql server 功能满足,但需要 ...

  2. Junit核心——测试类(TestCase)、测试集(TestSuite)、测试运行器(TestRunner)

    首先,把这三个定义简单的说明一下: 1.测试类(TestCase):一个包含一个或是多个测试的类,在Junit中就是指的是包含那些带有@Test注解的方法的类,同一样也被称作“测试用例”; 2.测试集 ...

  3. 猜想:一组勾股数a^2+b^2=c^2中,a,b之一必为4的倍数。

    证明: 勾股数可以写成如下形式 a=m2-n2 b=2mn c=m2+n2 而m,n按奇偶分又以下四种情况 m n 奇 偶 ① 偶 奇 ② 偶 偶 ③ 奇 奇 ④ 上面①②③三种情况中,mn中存在至少 ...

  4. zookeeper单节点安装

    1.安装jdk 2.安装解压zookeeper 先创建文件夹 解压zookeeper压缩包 3.  创建配置文件zoo.cfg 4.运行测试

  5. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-为什么无法打开官方范例的项目,打开tszip文件时提示尝试越过结尾怎么办

    打开新的解决方案,找到tszip文件   提示错误Advanced Setting时越过结尾   到这里一般VS会卡死   但是我们已经可以得到解压出来的文件夹,其中包含PLC的完整项目文件夹,可以新 ...

  6. IE下有没有类似于Firebug的调试工具

    你可以从以下网站下载firebuglite(Firebug推出的针对非火狐浏览器的调试工具) https://getfirebug.com/firebuglite   一般安装Stable chann ...

  7. C#字符串来袭——因为爱,所以爱

    一直以来都喜欢谢霆锋,喜欢他身上的那股劲,也一直喜欢唱他的歌,比如这首最广为人知的<因为爱,所以爱>:因为爱所以爱,温柔经不起安排,愉快那么快,不要等到互相伤害...是的,没到互相伤害,他 ...

  8. iOS sort array 数组排序里面的对象

    一:如下代码 //对数据按次数排序 NSArray *sortArrays = [pinCiDataArray sortedArrayUsingComparator:^NSComparisonResu ...

  9. A-Z排序控件的实现

    前言 最近项目需要做一个地区首字母a-z排序的效果,记录一下自己如何实现的. 先看下效果图: 分析 这种效果自己实现还是第一次;之前见过这种效果: 这些字母都是onDraw画上去的;只要知道每个字母的 ...

  10. OOP Class具体解释

    对象[编辑] 对象(Object)是类的实例.比如."狗"这个类列举狗的特点,从而使这个类定义了世界上全部的狗. 而莱丝这个对象则是一条详细的狗,它的属性也是详细的.狗有皮毛颜色. ...