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练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
随机推荐
- 500 Keyboard Row 键盘行
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词. 详见:https://leetcode.com/problems/keyboard-row/description/ C++: cl ...
- salt-stack系列报错
master启动报错 实验环境为: [root@master salt]# cat /proc/version Linux version 3.10.0-327.el7.x86_64 (mockbui ...
- java中stringBuilder的用法
java中stringBuilder的用法 String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需 ...
- C++ thread operator= 右值引用 vector foreach
这是 thread 的construct定义: default (1) thread() noexcept; initialization (2) template <class Fn, cla ...
- 【转】一篇文章,教你学会Git
一篇文章,教你学会Git 在日常工作中,经常会用到Git操作.但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼.本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令 ...
- java写跳一跳辅助程序
##起初是想使用按键精灵脚本程序控制,但还是选择熟悉的java.我这里使用了工具,造成延迟问题.也求教:java控制安卓的正确姿势, 参考了.NET玩跳一跳,思路都是一样的,只不过使用ADB控制安卓的 ...
- 无法登录phpmyadmin,报1130错误
分析过程及解决方案: mysql的1130错误是远程连接的用户无远程权限问题导致.解决方案:在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”loc ...
- git设置log的别名 for hist
hist -- alias for 'log --color --graph --date=short --pretty=format:'%Cred%h%Creset -%C(yellow)%d%C ...
- 移动端超级好用的reset.css(只做参考哦具体以你们实际项目需求为准)
html { color: #333; /*规定主色调,依据业务场景(非必须)*/ background: #F6F6F6; /*规定主背景,依据业务场景(非必须)*/ overflow-y: aut ...
- Animate.css_css3动画库介绍
插件描述:Animate.css内置了很多典型的css3动画,兼容性好使用方便. Animate.css是一个有趣的,跨浏览器的css3动画库.很值得我们在项目中引用. 用法 1.首先引入animat ...






