Balanced Lineup
Time Limit: 5000MS   Memory Limit: 65536K
 
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 ≤ 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

看到很多PPT博客啥的都将这题作为例题,然后,,,看了看样例,没忍住把它A了,这应该算是线段数简单区间查询题了,做过HDU-I hate it 这道题问题就不大;题意就是给你N 个数,Q次查询,每次输入两个数代表区间,问区间内最大值与最小值的差,大概就是这样,没看题,看样例然后就。。。。。A了;

上代码:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N=50000+10;
struct node
{
int l,r;
int maxx,minn;//存放最大值与最小值;
} a[N<<2];
void build(int l,int r,int k)
{
if(l==r)
{
a[k].r=a[k].l=l;
a[k].maxx=a[k].minn=0;初始化;
return ;
}
int mid=(l+r)/2;
a[k].r=r,a[k].l=l;
build(l,mid,2*k);//左子树;
build(mid+1,r,2*k+1);//右子树;
}
void insert(int d,int n,int k)
{
if(a[k].l==a[k].r&&a[k].l==d)
{
a[k].maxx=n;
a[k].minn=n;//叶节点最大值与最小值就是本身,然后重要的在下面的回溯里;
return ;
}
int mid=(a[k].l+a[k].r)/2;
if(d<=mid) insert(d,n,2*k);
else insert(d,n,2*k+1);
a[k].maxx=max(a[k*2].maxx,a[k*2+1].maxx);
a[k].minn=min(a[k*2].minn,a[k*2+1].minn);//回溯使得父亲节点分别存储最大最小值;
}
int qmax(int l,int r,int k)
{
if(a[k].l==l&&a[k].r==r)
return a[k].maxx;
int mid=(a[k].l+a[k].r)/2;
if(r<=mid) return qmax(l,r,2*k);
if(l>mid) return qmax(l,r,2*k+1);
return max(qmax(l,mid,2*k),qmax(mid+1,r,2*k+1));
}
int qmin(int l,int r,int k)
{
if(a[k].l==l&&a[k].r==r)
return a[k].minn;
int mid=(a[k].l+a[k].r)/2;
if(r<=mid) return qmin(l,r,2*k);
if(l>mid) return qmin(l,r,2*k+1);
return min(qmin(l,mid,2*k),qmin(mid+1,r,2*k+1));
}
int main()
{
int n,m,q,i;
scanf("%d%d",&n,&q);
build(1,n,1);
for(i=1; i<=n; i++)
{
scanf("%d",&m);
insert(i,m,1);
}
int x,y;
while(q--)
{
scanf("%d%d",&x,&y);
if(x==y)
printf("0\n");//节约点时间特判了一下<img alt="大笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif" />
else
printf("%d\n",qmax(x,y,1)-qmin(x,y,1));//查询是可以放在一个函数的,不过没用void
}
return 0;
}

POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~的更多相关文章

  1. poj 3264 Balanced Lineup(RMQ裸题)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 43168   Accepted: 20276 ...

  2. POJ 3264:Balanced Lineup(RMQ模板题)

    http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...

  3. poj 3264 Balanced Lineup (RMQ算法 模板题)

    RMQ支持操作: Query(L, R):  计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...

  4. P2880 [USACO07JAN]平衡的阵容Balanced Lineup

    P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ RMQ模板题 静态求区间最大/最小值 (开了O2还能卡到rank9) #include<iostream&g ...

  5. poj 3264:Balanced Lineup(线段树,经典题)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 32820   Accepted: 15447 ...

  6. POJ 3274:Gold Balanced Lineup 做了两个小时的哈希

    Gold Balanced Lineup Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13540   Accepted:  ...

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

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

  8. Balanced Lineup poj3264 线段树

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

  9. 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)

    P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...

随机推荐

  1. Smart 组件 vs Dumb 组件

    大家已经知道,只会接受 props 并且渲染确定结果的组件我们把它叫做 Dumb 组件,这种组件只关心一件事情 —— 根据 props 进行渲染. Dumb 组件最好不要依赖除了 React.js 和 ...

  2. C#实现较为实用的SQLhelper

    第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新 ...

  3. spring mvc URL忽略大小写

    @Configuration public class SpringWebConfig extends WebMvcConfigurationSupport { @Override public vo ...

  4. 11.1Java-接口

    一.接口 interface定义:固定格式 public abstract 返回值类型 方法名字(参数列表);代码: public interface AMyInterface { public ab ...

  5. 洛谷2017 5月月赛R1

    我只想说面对这种难度的题目就是冲着20%的数据暴力... 分数:40+20+36.1+38+0+19 T1 签到题 III 题目背景 pj组选手zzq近日学会了求最大公约数的辗转相除法. 题目描述 类 ...

  6. Android RxJava小结

    一.如何使用 在build.gradle中添加依赖 dependencies { api 'io.reactivex:rxandroid:1.2.1' api 'io.reactivex:rxjava ...

  7. Java堆分配参数总结

    与Java应用程序堆内存相关的JVM参数有: -Xms:设置Java应用程序启动时的初始堆大小 -Xmx:设置Java应用程序能获得的最大堆大小 -Xss:设置线程栈的大小 -XX:MinHeapFr ...

  8. # Transition:添加弹出过渡效果

    # Transition:添加弹出过渡效果 通过鼠标的单击.获得焦点,被点击或对元素任何改变中触发,并平滑地以动画效果改变CSS的属性值. W3C-transition MDN-transition ...

  9. AWS Data Lake Service Stack

  10. Element UI tree 回显问题

    Part.1 问题 写项目时遇到一个棘手的问题,在做关于权限功能时,点击修改需要显示角色原本对应的权限.涉及到了 tree 组件回显,但是有一个很尴尬的问题:tree 组件只要父节点选中,那么子节点就 ...