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

USACO 2007 January Silver

看到很多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" />elseprintf("%d\n",qmax(x,y,1)-qmin(x,y,1));//查询是可以放在一个函数的,不过没用void}return 0;
}

转载于:https://www.cnblogs.com/nyist-TC-LYQ/p/7208269.html

POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~相关推荐

  1. sql max同一行_超经典SQL题 | 做完这4道面试题你就过关了

    - 点击上方"爱数据学习社"关注我们吧! -文末领取[SQL数据分析常用语句]上篇文章→:SNA分析法是什么?KOL投放价值评估! 题目解析 | 爱数据青林 内容来源 | 爱数据学 ...

  2. 4创建ui显示不出来_4道小学生经典推理题,家长们一道也做不出来,太烧脑了...

    随着我们经济水平不断提高,对教育越来越重视,尤其是中小学教育,老师和家长们都不想在输在起跑线,于是就给孩子们疯狂的报各种各样的补习班,孩子们所接触到的知识也越来越多,考试所用的题目也越来越难.这也导致 ...

  3. 初中经典几何题,95%的同学都不会做,高手请进来 2016-03-21 16:25 几何是初中数学最主要的内容,对大多数孩子来说也是比较难的内容。而我们想要战胜这一比较难的题型,我们就需要多多练题

    初中经典几何题,95%的同学都不会做,高手请进来 2016-03-21 16:25 几何是初中数学最主要的内容,对大多数孩子来说也是比较难的内容.而我们想要战胜这一比较难的题型,我们就需要多多练题. ...

  4. bzoj 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 689  Solved: 456 ...

  5. 图解SQL面试题:经典50题

    图解SQL面试题:经典50题 已知有如下4张表: 学生表:student(学号,学生姓名,出生年月,性别) 成绩表:score(学号,课程号,成绩) 课程表:course(课程号,课程名称,教师号) ...

  6. poj3264 - Balanced Lineup(RMQ_ST)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 45243   Accepted: 21240 ...

  7. 经典算法题每日演练——第十九题 双端队列

    经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...

  8. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 697  Solved: 463 ...

  9. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 ...

最新文章

  1. (双引号)与 ' '(单引号)的区别
  2. SAX解析XML文件
  3. 2022年改变数据中心行业的八大趋势
  4. 周五话运营 | 和用户谈一段不分手的恋爱(留存分析)
  5. Android远程服务与本地服务的特点以及功能差异
  6. 一个数如果刚好与它所有的真因子之和相等,则称该数为一个“完数
  7. 线程退出时执行函数,处理资源
  8. 编程基本功:BUG描述不要偷懒,不要误导
  9. webqq机器人java_一步一步来做WebQQ机器人-(二)(第一次登陆)
  10. 信息系统运行管理员有必要考吗?现在备考还来得及吗?
  11. 计算机机器人比赛有哪些,RoboCup机器人世界杯赛有哪些项目?
  12. Windows 下载安装 Seata
  13. 2021年茶艺师(初级)考试及茶艺师(初级)考试总结
  14. linux bios 禁用usb设备,当USB在UEFI / BIOS中工作时,为什么USB在Linux中不工作?
  15. JS不跨域操控网易云音乐外链播放器
  16. sudo: /etc/sudoers.d 可被任何人写
  17. Debian 执行apt-get update失败提示:请使用 apt-cdrom,通过它可以让 APT 识别该盘片。apt-get upgdate 不能被用来加入新的盘片
  18. Codeforces Round #644 (Div. 3) D.Buying Shovels
  19. UON:《Detecting Unexpected Obstacles for Self-Driving Cars...》论文阅读与总结
  20. java面试题2021

热门文章

  1. android项目中有哪几种依赖关系,Android Studio项目中三种依赖的添加方式
  2. linux网站权限一直自动关闭,奇妙伞-解决SELinux对网站目录权限控制的不当的问题--网上摘抄集合,记录使用...
  3. Linux中创建新用户并赋予指定目录的相关权限
  4. linux安装ftp后账号密码设置,CentOS 建立ftp账号(vsftpd运用安装与配置疑问 )
  5. java 服务器 时间_java 获取服务器的时间,年月日时分秒
  6. Java中二维数组和面向对象
  7. Java程序莫名其妙卡死的一次经历
  8. 10_隐马尔科夫模型HMM2_统计学习方法
  9. python模拟键盘输入+切换键盘布局
  10. deian   授权用户 sudo权限