POJ 3264 Balanced Lineup(RMQ)
题意 :N头奶牛,Q次询问,然后给你每一头奶牛的身高,每一次询问都给你两个数,x y,代表着从x位置上的奶牛到y位置上的奶牛身高最高的和最矮的相差多少。
思路 : 刚好符合RMQ的那个求区间最大最小值,所以用RMQ还是很方便的。就是一个RMQ的模板题,基本上书上网上都有。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream> const int maxn = ;
int maxsum[maxn][],minsum[maxn][] ;
int a[maxn] ;
int N,Q ; using namespace std ; void Init()
{
for(int i = ; i <= N ; i++)
{
scanf("%d",&a[i]) ;
maxsum[i][] = a[i] ;
minsum[i][] = a[i] ;
}
} void RMQ()
{
int k = (int )(log((double)N)/log(2.0)) ;
for(int j = ; j <= k ; j++)
for(int i = ; i <= N ; i++)
if(i + ( << j) - <= N )
{
maxsum[i][j] = max(maxsum[i][j-],maxsum[i + ( << (j-))][j-]) ;
minsum[i][j] = min(minsum[i][j-],minsum[i + ( << (j-))][j-]) ;
}
}
int main()
{
while(~scanf("%d %d",&N,&Q))
{
Init() ;
RMQ() ;
int x,y ;
for(int i = ; i <= Q ; i++)
{
scanf("%d %d",&x,&y) ;
int k = (int)(log((double)(y-x+))/log(2.0)) ;
int minn = min(minsum[x][k],minsum[y-(<<k)+][k]) ;
int maxx = max(maxsum[x][k],maxsum[y-(<<k)+][k]) ;
printf("%d\n",maxx-minn) ;
}
}
return ;
}
线段树写法 :
//POJ 3264
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std ; //int maxx,minn ;
int p[ * ],q[ * ]; void pushup(int rt)
{
p[rt] = max(p[rt << ],p[rt << | ]) ;
q[rt] = min(q[rt << ],q[rt << | ]) ;
}
void build(int l,int r,int rt)
{
int a ;
if(l == r)
{
scanf("%d",&a) ;
p[rt] = a ;
q[rt] = a ;
return ;
}
int mid = (l+r) >> ;
build(l,mid,rt << ) ;
build(mid+,r,rt << | ) ;
pushup(rt) ;
}
int query(int L,int R,int l,int r,int rt)
{
int maxx = - ;
if(l >= L && r <= R)
{
return p[rt] ;
}
int mid = (l+r) >> ;
if(mid >= L)
maxx = max(maxx,query(L,R,l,mid,rt << ) ) ;
if(mid < R)
maxx = max(maxx,query(L,R,mid+,r,rt << | )) ;
return maxx ;
}
int querz(int L,int R,int l,int r,int rt)
{
int minn = ;
if(l >= L && r <= R)
{
return q[rt] ;
}
int mid = (l+r) >> ;
if(mid >= L)
minn = min(minn,querz(L,R,l,mid,rt << ) ) ;
if(mid < R)
minn = min(minn,querz(L,R,mid+,r,rt << | ) );
return minn ;
}
int main()
{
int N,M ;
while(~scanf("%d %d",&N,&M))
{
build(,N,) ;
int a,b ;
for(int i = ; i < M ; i++)
{
scanf("%d %d",&a,&b) ;
// printf("%d %d*\n",query(a,b,1,N,1),querz(a,b,1,N,1)) ;
printf("%d\n",query(a,b,,N,) - querz(a,b,,N,) ) ;
}
}
return ;
}
POJ 3264 Balanced Lineup(RMQ)的更多相关文章
- poj 3264 Balanced Lineup(RMQ裸题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 43168 Accepted: 20276 ...
- POJ 题目3264 Balanced Lineup(RMQ)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 39046 Accepted: 18291 ...
- POJ 3264 Balanced Lineup(RMQ_ST)
题目链接:http://poj.org/problem? id=3264 Description For the daily milking, Farmer John's N cows (1 ≤ N ...
- poj 3264:Balanced Lineup(线段树,经典题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32820 Accepted: 15447 ...
- POJ - 3264——Balanced Lineup(入门线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 68466 Accepted: 31752 ...
- POJ 3264 Balanced Lineup(ST模板)
链接:http://poj.org/problem?id=3264 题意:给n个数,求一段区间L,R的最大值 - 最小值,Q次询问 思路:ST表模板,预处理区间最值,O(1)复杂度询问 AC代码: # ...
- poj 3264 Balanced Lineup (线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 42489 Accepted: 20000 ...
- Balanced Lineup(RMQ)
原题传送门 就是裸RMQ啊.. 求区间最大值和区间最小值,一看就像RMQ,当然线段树貌似也可以. 至于算法嘛.自己学~(好吧,放个传送门...) 然后就是最后把maxsum-minsum就好啦233~ ...
- POJ 3264 Balanced Lineup (线段树)
Balanced Lineup For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the s ...
随机推荐
- 【转】BUG敏感度的培养
在我们刚踏入软件测试行业时,不管你是专业的.非专业的,培训出来的还是未培训的.刚进公司时你看着身边的同时报的Bug很多并且大都是严重程度高,自己也很想提高一下,想要提高自己的bug敏感度,建议从下面几 ...
- 常用CSS技巧资料收集
1.重置浏览器的字体大小 重置浏览器的默认值 ,然后重设浏览器的字体大小你可以使用雅虎的用户界面重置的CSS方案 ,如果你不想下载9MB的文件,代码如下: body,div,dl,dt,dd,ul, ...
- dedecms导航
{dede:global.cfg_cmsurl /} 首页链接 一级导航: {dede:channel type=“top”} [field:typelink]:导航链接 [field:typenam ...
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
- JavaScript 数组方法总结
最近公司没项目.所以所幸学学JS.毕竟很多人和我一样.属于培训机构出来的.JS基础也很差. 面试的时候面试官问你 .你会JS不.你会毫不犹豫的回答会.因为你确实用过.但是真正会的或许只是以前项目中需要 ...
- 华为机试_字符串识别_Vector的使用;
第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述: 拼音 yi er san si wu liu qi ba jiu ...
- VS2013开发Windows服务项目
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
- 转:基于IOS上MDM技术相关资料整理及汇总
一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...
- jquery 动态添加下拉框 需要增加 煊染 selectmenu("refresh");
若通过js动态选择下拉框的值必须刷新下拉框,例如:var selArray = $("select#sel");selArray[0].selectedIndex = 1;selA ...
- php 加密解密方法
<?php//可用于加密解密,如cookie,账号,手机号 as so on class DES { var $key; var $iv; //偏移量 function __construct( ...