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 ...
随机推荐
- 使用jQuery获取Bootstrap Switch的值
$('#switcher').bootstrapSwitch('state'); // true || false $('#switcher').bootstrapSwitch('toggleStat ...
- Burosuite抓包Sqlmap学习Sql注入
在sqlmap中加入--proyxy参数: --proxy "http://127.0.0.1:8080" 如下图所示: 回车以后sqlmap会自动抓到数据包: 我们选择向前(fo ...
- 多个DIV让float:left属性,最后一个DIV填满剩余的部分
<DIV style="border:1px solid red; overflow:hidden;zoom:1;"> <DIV style='floa ...
- scala学习笔记:理解stream和view
先来个正常的: scala> (0 to 5).map((x:Int)=>{println(x);x*2}).foreach(println) 0 1 2 3 4 5 0 2 4 6 8 ...
- 如何让Div层悬浮在Flash Object对象之上(转载)
今天有个用户,门户右上角的倒三角登陆小按钮在他的电脑上无法显示,他用的笔记本屏幕较小,宽度正好显示出页面内容,经查看,门户页眉使用的为flash对象. 大家都知道,如果想让某个图片或者Div层悬浮在别 ...
- Android——简单音乐播放器
使用MediaPlayer做的简单音乐播放器,更多内容请到百度经验查看 http://jingyan.baidu.com/article/60ccbceb63452364cab197f1.html ...
- java学习笔记3
今天在练习java中的javabean的使用中发现.usebean的 <jsp:setProperty property="id" name="user" ...
- 九度OJ 1499 项目安排 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时 ...
- OpenJudge 2795 金银岛
1.链接地址: http://bailian.openjudge.cn/practice/2795/ 2.题目: 总Time Limit: 3000ms Memory Limit: 65536kB D ...
- OpenJudge 2754 八皇后
1.链接地址: http://bailian.openjudge.cn/practice/2754 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 会下国际象棋的人都很清楚: ...