POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~
| 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
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
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 一样~~的更多相关文章
- poj 3264 Balanced Lineup(RMQ裸题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 43168 Accepted: 20276 ...
- POJ 3264:Balanced Lineup(RMQ模板题)
http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...
- poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作: Query(L, R): 计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...
- P2880 [USACO07JAN]平衡的阵容Balanced Lineup
P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ RMQ模板题 静态求区间最大/最小值 (开了O2还能卡到rank9) #include<iostream&g ...
- poj 3264:Balanced Lineup(线段树,经典题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32820 Accepted: 15447 ...
- POJ 3274:Gold Balanced Lineup 做了两个小时的哈希
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13540 Accepted: ...
- POJ 3264 Balanced Lineup 线段树 第三题
Balanced Lineup Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line ...
- Balanced Lineup poj3264 线段树
Balanced Lineup poj3264 线段树 题意 一串数,求出某个区间的最大值和最小值之间的差 解题思路 使用线段树,来维护最大值和最小值,使用两个查询函数,一个查区间最大值,一个查区间最 ...
- 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)
P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
随机推荐
- 138 Copy List with Random Pointer 复制带随机指针的链表
给出一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点.返回一个深拷贝的链表. 详见:https://leetcode.com/problems/copy-list- ...
- D. Black Hills golden jewels 二分答案 + 二分判定
http://codeforces.com/gym/101064/problem/D 题目是给定一个数组,如果两两组合,有C(n, 2)种结果,(找出第一个大于等于第k大的结果) 思路, 二分答案va ...
- jquery 根据文内内容获取dom
$("table tr td:contains(5)")
- Git之提交项目到远程github
1.在分支dev下,默认本地工作区有项目project 2. git add project [添加项目到暂存区] 3. git commit project -m "提交项目" ...
- [转]合理使用ArrayMap代替HashMap
合理使用ArrayMap代替HashMap 2016年07月08日 15:34:44 阅读数:5938 转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/ ...
- 基于socketserver实现的并发(tcp和udp)
threading 线程 基于tcp协议:请求建立连接,然后开启进程 基于udp协议:直接开启新进程 基于tcp协议 import socketserver # 导入socketserver模块 # ...
- 新建cordova应用,插件开发教程系列(总目录)
以下几篇是连续的教程,代码也是连续的,包括如下章节: 新建cordova应用 https://www.cnblogs.com/cannel/p/11074359.html 使用cordova把h5应用 ...
- 后TOS时代的码头数字化生产力
之前看过一篇文章是,是INFORM的副总裁写的关于以TOS外挂模式提升码头生产效能的文章.文章对外挂模式的总结挺好的,我最近也一直从事这块的工作,以此文梳理一下前面的经验,记录一下自己的感想. TOS ...
- QTableWidget表头样式
转载请注明出处:http://www.cnblogs.com/dachen408/p/7742680.html QTableView { background-color: rgba(255, 255 ...
- 如何在Ubuntu里安装Helm
Helm是什么?在战网上玩过暗黑破坏神2代的程序员们应该还记得,Helm是国度的意思. 而在计算机领域,Helm是什么? Helm是Kubernetes的一个包管理工具,有点像nodejs的npm,U ...






