POJ 3264 Balanced Lineup -- RMQ或线段树
一段区间的最值问题,用线段树或RMQ皆可。两种代码都贴上:又是空间换时间。。
RMQ 解法:(8168KB 1625ms)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define N 50003 int a[N],dmin[N][],dmax[N][],n; void RMQ_init()
{
int i,j;
for(i=;i<=n;i++)
dmin[i][] = dmax[i][] = a[i];
for(j=;(<<j)<=n;j++)
{
for(i=;i+(<<j)-<=n;i++)
{
dmin[i][j] = min(dmin[i][j-],dmin[i+(<<(j-))][j-]);
dmax[i][j] = max(dmax[i][j-],dmax[i+(<<(j-))][j-]);
}
}
} int RMQ(int l,int r)
{
int k = ;
while((<<(k+)) <= r-l+)
k++;
return max(dmax[l][k],dmax[r-(<<k)+][k]) - min(dmin[l][k],dmin[r-(<<k)+][k]);
} int main()
{
int q,i;
while(scanf("%d%d",&n,&q)!=EOF)
{
for(i=;i<=n;i++)
scanf("%d",&a[i]);
RMQ_init();
while(q--)
{
int l,r;
scanf("%d%d",&l,&r);
if(l>r)
swap(l,r);
printf("%d\n",RMQ(l,r));
}
}
return ;
}
线段树解法:(1172KB 2297ms)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define N 50003 struct node
{
int maxi,mini;
}tree[*N]; void pushup(int rt)
{
tree[rt].maxi = max(tree[*rt].maxi,tree[*rt+].maxi);
tree[rt].mini = min(tree[*rt].mini,tree[*rt+].mini);
} void build(int l,int r,int rt)
{
if(l == r)
{
scanf("%d",&tree[rt].maxi);
tree[rt].mini = tree[rt].maxi;
return;
}
int mid = (l+r)/;
build(l,mid,*rt);
build(mid+,r,*rt+);
pushup(rt);
} int query_max(int l,int r,int aa,int bb,int rt)
{
if(aa>r || bb<l)
return -;
if(aa<=l && bb>=r)
return tree[rt].maxi;
int mid = (l+r)/;
return max(query_max(l,mid,aa,bb,*rt),query_max(mid+,r,aa,bb,*rt+));
} int query_min(int l,int r,int aa,int bb,int rt)
{
if(aa>r || bb<l)
return ;
if(aa<=l && bb>=r)
return tree[rt].mini;
int mid = (l+r)/;
return min(query_min(l,mid,aa,bb,*rt),query_min(mid+,r,aa,bb,*rt+));
} int main()
{
int n,q,i;
while(scanf("%d%d",&n,&q)!=EOF)
{
build(,n,);
for(i=;i<=q;i++)
{
int l,r;
scanf("%d%d",&l,&r);
if(l>r)
swap(l,r);
printf("%d\n",query_max(,n,l,r,)-query_min(,n,l,r,));
}
}
return ;
}
POJ 3264 Balanced Lineup -- RMQ或线段树的更多相关文章
- POJ - 3264——Balanced Lineup(入门线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 68466 Accepted: 31752 ...
- POJ 3264 Balanced Lineup(zkw线段树)
[题目链接] http://poj.org/problem?id=3264 [题目大意] 求区间最大值和最小值的差值 [题解] 线段树维护区间极值即可 [代码] #include <cstdio ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- poj 3264 Balanced Lineup (RMQ)
/******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...
- POJ - 3264 Balanced Lineup (RMQ问题求区间最值)
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
- poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作: Query(L, R): 计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...
- POJ 3264 Balanced Lineup RMQ ST算法
题意:有n头牛,编号从1到n,每头牛的身高已知.现有q次询问,每次询问给出a,b两个数.要求给出编号在a与b之间牛身高的最大值与最小值之差. 思路:标准的RMQ问题. RMQ问题是求给定区间内的最值问 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
随机推荐
- 打印机问题win7 和xp
服务器端问题,重启如下服务 net stop "print spooler" net start "print spooler" gpedit.msc 本地计算 ...
- MAC 隐藏文件的显示
显示 defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏 defaults write com.apple.finder A ...
- SQL Server性能影响的重要结论
第一次访问数据会比接下来的访问慢的多,因为它要从磁盘读取数据然后写入到缓冲区: 聚合查询(sum,count等)以及其他要扫描大部分表或索引的查询需要大量的缓冲,而且如果它导致SQL Server从缓 ...
- 「C语言」单链表/双向链表的建立/遍历/插入/删除
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- Hazelcast介绍与使用
Hazelcast 是一个开源的可嵌入式数据网格(社区版免费,企业版收费).你可以把它看做是内存数据库,不过它与 Redis 等内存数据库又有些不同.项目地址:http://hazelcast.org ...
- HTML Jquery
在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...
- 高性能文件缓存key-value存储—Memcached
1.高性能文件缓存key-value存储—Redis 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出 ...
- PHP控制前台弹出对话框
应用场景: 微信授权登录过程中,需要用户确认,故衍生此需求: 相应的逻辑不放在前端的原因是,此部分逻辑属于偏功能业务,所以放在后端,方便统一管理. 解决办法: 通过php echo出javascrip ...
- smali语法中文版
作者:Gabor Paller 翻译:YULIANGMAX v1.0 表中的vx.vy.vz表示某个Dalvik寄存器.根据不同指令可以访问16.256或64K寄存器. 表中lit4.lit8. ...
- anriod TabHost
package com.example.yanlei.mytk; import android.os.Bundle; import android.support.v7.app.AppCompatAc ...