Balanced Lineup
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 44121   Accepted: 20715
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 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 ≤ ABN), 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
好久没写,写搓了,orz
代码:
#include <iostream>
#include <cstdio>
#include  <cstring>
#include  <algorithm>
using namespace std;
const int maxn=70000;
int a[maxn];
int x,y;
struct nod
{
    int mi;
    int ma;
};
nod tree[4*maxn];
void build(int p,int l,int r)
{
    if(l==r) {tree[p].mi=a[l];tree[p].ma=a[l];return;}
    int mid=(l+r)>>1;
    build(p<<1,l,mid);
    build((p<<1)+1,mid+1,r);
    tree[p].mi=min(tree[p<<1].mi,tree[(p<<1)+1].mi);
    tree[p].ma=max(tree[p<<1].ma,tree[(p<<1)+1].ma);
}
int find1(int p,int l,int r,int x,int y)
{
    if(x<=l&&r<=y) {return tree[p].ma;}
    int mid=(l+r)>>1;
    if(y<=mid) return find1(p<<1,l,mid,x,y);
    else if(x>mid) return find1((p<<1)+1,mid+1,r,x,y);
    else return max(find1(p<<1,l,mid,x,mid),find1((p<<1)+1,mid+1,r,mid+1,y));
}
int find2(int p,int l,int r,int x,int y)
{
    if(x<=l&&r<=y) {return tree[p].mi;}
    int mid=(l+r)>>1;
    if(y<=mid) return find2(p<<1,l,mid,x,y);
    else if(x>mid) return find2((p<<1)+1,mid+1,r,x,y);
    else return min(find2(p<<1,l,mid,x,mid),find2((p<<1)+1,mid+1,r,mid+1,y));
}
int main()
{
    int n,q;
    int x,y;
    while(scanf("%d%d",&n,&q)!=EOF)
    {
        memset(tree,0,sizeof(tree));
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        build(1,1,n);
        while(q--)
        {
            scanf("%d%d",&x,&y);
            printf("%d\n",find1(1,1,n,x,y)-find2(1,1,n,x,y));
        }
    }
    return 0;
}

poj3264 线段树的更多相关文章

  1. Balanced Lineup poj3264 线段树

    Balanced Lineup poj3264 线段树 题意 一串数,求出某个区间的最大值和最小值之间的差 解题思路 使用线段树,来维护最大值和最小值,使用两个查询函数,一个查区间最大值,一个查区间最 ...

  2. POJ3264线段树求最值

    刚开始还觉得有点怪怪的.因为想着如果每个树只是单纯地记录它所在的区间的话会不会有不在区间内的数据给更新了,但是我好像是傻掉了因为如果有这种情况出现的话在父亲节点就会分成l,mid和mid+1,r两个区 ...

  3. POJ3264(线段树入门题)

    Balanced LineupCrawling in process... Crawling failed Time Limit:5000MS     Memory Limit:65536KB     ...

  4. poj3264(简单线段树)

    题目链接:https://vjudge.net/problem/POJ-3264 题意:线段树简单应用题,区间查询最大值和最小值的差. 思路:用线段树维护区间的最大值和最小值即可. AC代码: #in ...

  5. 几道简单的线段树入门题 POJ3264&&POJ3468&&POJ2777

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

  6. [POJ3264]Balanced Lineup(线段树,区间最值差)

    题目链接:http://poj.org/problem?id=3264 一排牛按1~n标号记录重量,问每个区间最重的和最轻的差值. 线段树维护当前节点下属叶节点的两个最值,查询后作差即可. #incl ...

  7. POJ3264——Balanced Lineup(线段树)

    本文出自:http://blog.csdn.net/svitter 题意:在1~200,000个数中.取一段区间.然后在区间中找出最大的数和最小的数字.求这两个数字的差. 分析:按区间取值,非常明显使 ...

  8. poj3264(线段树区间求最值)

    题目连接:http://poj.org/problem?id=3264 题意:给定Q(1<=Q<=200000)个数A1,A2,```,AQ,多次求任一区间Ai-Aj中最大数和最小数的差. ...

  9. POJ3264(线段树求区间最大最小值)

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

随机推荐

  1. DHTML【2】--HTML

    通过题目,大家已经明确知道,从这一节开始介绍DHTML中的最基础的部分HTML,对于HTML等概念上一节已经做了概述,这一节不再赘余.在学习HTML之前,先告诉大家一个好消息,HTML不难,比C++. ...

  2. jQuery1.9(辅助函数)学习之—— jQuery.param( obj ); 编辑

    jQuery.param( obj );  返回一个String 描述: 创建一个数组或对象序列化的的字符串,适用于一个URL 地址查询字符串或Ajax请求. jQuery.param( obj ); ...

  3. 腾讯CMEM的PHP扩展(转载)

    题外话最近公司在做相关的业务,由于Memcached协议缺少返回码,为了保证业务数据的安全性,不得已只好自己写个扩展来实现需求. 基于memcache扩展的2.2.6的稳定版开发而来.代码已经开源,有 ...

  4. 关于exec命令函数

    exec执行某命令在命令行下没有问题,但是在php中就出错.这个问题99.99%与权限有关,但是exec执行的命令不会返回错误.一个技巧就是使用管道命令,假设你的exec调用如下: exec('con ...

  5. Android再学习-20141023-Intent-Thread

    20141023-Android再学习 Intent对象的基本概念 Intent是Android应用程序组件之一 Intent对象在Android系统中表示一种意图 Intent当中最重要的内容是ac ...

  6. MVC 中引入Jquery文件的几种方法

    方法1: <script src="@Url.Content("~/Scripts/jquery-1.9.1.js")" type="text/ ...

  7. TVS管

    1.原理 TVS二极管在线路板上与被保护线路并联,当瞬时电压超过电路正常工作电压后,TVS二极管便产生雪崩,提供给瞬时电流一个超低电阻通路,其结果是瞬时电流透过二极管被引开,避开被保护元件,并且在电压 ...

  8. 例说 AD中ROOM的使用

    从OrCAD中将网表导入之后,区别于从AD原理图中导入,笔者经过反复试验,发现在OrCAD中定义的种种区域属性,比如像Page,Class,Room,在AD中导入之后全部消失,这就意味着你本来按照模块 ...

  9. 新技术:Qt for Native Client (and emscripten)

    http://blog.qt.io/blog/2015/09/25/qt-for-native-client-and-emscripten/

  10. 给logstash 模板添加触发器