poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作:
Query(L, R): 计算Min{a[L],a[L+1], a[R]}。
预处理时间是O(nlogn), 查询只需 O(1)。
RMQ问题 用于求给定区间内的最大值/最小值问题。。询问的次数多的时候 好用。。
这个题目我至少得开数组开到 80000才能过,不知道为什么。。刚开始还写错了,贡献了好多RE和WA..
题目:http://poj.org/problem?id=3264
题意:给n个数,q次询问,求最值的差。。
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = ;
const int maxm = ;
int d_min[maxn][maxm],d_max[maxn][maxm],a[maxn];
int n; void RMQ_init()
{
int i,j;
for(i = ; i <= n; i++)
{
d_min[i][] = a[i];
d_max[i][] = a[i];
}
for(j = ; (<<j) <= n; j++)
for(i = ; i + j - <= n; i++)
{
d_min[i][j] = min(d_min[i][j-],d_min[i + (<<(j-))][j-]);
d_max[i][j] = max(d_max[i][j-],d_max[i + (<<(j-))][j-]);
}
} int RMQ_min(int l,int r)
{
int k = ;
while((<<(k+)) <= r-l+)
k++;
return min(d_min[l][k], d_min[r-(<<k)+][k]);
}
int RMQ_max(int l,int r)
{
int k = ;
while((<<(k+)) <= r-l+)
k++;
return max(d_max[l][k], d_max[r-(<<k)+][k]);
}
int main()
{
int q,l,r,i;
scanf("%d%d",&n,&q);
for(i = ; i <= n; i++)
scanf("%d",&a[i]);
RMQ_init(); while(q--)
{
scanf("%d%d",&l,&r);
printf("%d\n",RMQ_max(l,r)-RMQ_min(l,r));
}
return ;
}
我的模板:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn = ;
const int maxm = ;
int d_min[maxn][maxm],d_max[maxn][maxm],a[maxn];
int n; void RMQ_init()
{
int i,j;
for(i = ; i <= n; i++) //数组下标从1开始的。
{
d_min[i][] = a[i];
d_max[i][] = a[i];
}
for(j = ; (<<j) <= n; j++)
for(i = ; i + j - <= n; i++)
{
d_min[i][j] = min(d_min[i][j-],d_min[i + (<<(j-))][j-]);
d_max[i][j] = max(d_max[i][j-],d_max[i + (<<(j-))][j-]);
}
} int RMQ_min(int l,int r)
{
int k = ;
while((<<(k+)) <= r-l+)
k++;
return min(d_min[l][k], d_min[r-(<<k)+][k]);
}
int RMQ_max(int l,int r)
{
int k = ;
while((<<(k+)) <= r-l+)
k++;
return max(d_max[l][k], d_max[r-(<<k)+][k]);
}
int main()
{
int i,l,r;
cin>>n;
for(i = ; i <= n; i++) //数组下标从1开始的。
cin>>a[i];
RMQ_init();
while(cin>>l>>r)
{
cout<<RMQ_min(l,r)<<endl;
cout<<RMQ_max(l,r)<<endl;
}
return ;
}
poj 3264 Balanced Lineup (RMQ算法 模板题)的更多相关文章
- 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 [ST算法]
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 34306 Accepted: 16137 ...
- 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 ST算法
题意:有n头牛,编号从1到n,每头牛的身高已知.现有q次询问,每次询问给出a,b两个数.要求给出编号在a与b之间牛身高的最大值与最小值之差. 思路:标准的RMQ问题. RMQ问题是求给定区间内的最值问 ...
- POJ 3264 Balanced Lineup(ST模板)
链接:http://poj.org/problem?id=3264 题意:给n个数,求一段区间L,R的最大值 - 最小值,Q次询问 思路:ST表模板,预处理区间最值,O(1)复杂度询问 AC代码: # ...
- POJ 3264 Balanced Lineup -- RMQ或线段树
一段区间的最值问题,用线段树或RMQ皆可.两种代码都贴上:又是空间换时间.. RMQ 解法:(8168KB 1625ms) #include <iostream> #include < ...
- POJ 3264 Balanced Lineup(RMQ)
点我看题目 题意 :N头奶牛,Q次询问,然后给你每一头奶牛的身高,每一次询问都给你两个数,x y,代表着从x位置上的奶牛到y位置上的奶牛身高最高的和最矮的相差多少. 思路 : 刚好符合RMQ的那个求区 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
随机推荐
- SlimDx绘制点图元的问题
问题:点图元在自己创建的三维环境里渲染不出来,代码如下: GMCustomVertex.PositionNormalColored wellPart = new GMCustomVertex.Posi ...
- Java 8 VM GC Tuning Guide Charter2
第二章 Ergonomics Ergonomics is the process by which the Java Virtual Machine (JVM) and garbage collect ...
- SQLServer2005:在执行批处理时出现错误。错误消息为: 目录名无效
删除数据时忘了想delete删除的话会记录日志,更何况是我删除百万条数据,结果还没删完服务器内存就占慢了,一切数据都进不来了,估计这种情况导致我的数据库有问题了,右键打开表提示:目录名无效,执行SQL ...
- c# 重载运算符(+-|&)和扩展方法
通常我们需要对class的相加,相减,相乘 等重载以适应需求, 如caml查询的时候,我们可以定义一个caml类,然后来操作这些查询. 首先,我们定义一个class为Test public class ...
- PDF.NET框架操作——工具应用(一)
PDF.NET是个开源的项目其解决UI层(WinForm / Web)控件数据绑定.映射与查询: BLL层实体对象查询(OQL):DAL层SQL语句和.NET数据访问代码映射(查看 SQL-MAP ...
- web.xml中servlet的配置
<servlet>元素是配置Servlet所用的元素. <servlet-mapping>元素在Servlet和URL样式之间定义一个映射,即servlet类提供一个url,在 ...
- Jqgrid使用
$('#mygrid').jqGrid('GridUnload'); //保留table元素 $('#mygrid').jqGrid('GridDestroy '); //相当于remove,移除 ...
- SQL SERVER调优常用方法
说起SQL SERVER的调优,我想大伙也很想知道这方面的知识.本人也正在探索的路上,大家有什么好的意见,欢迎一起探讨.研究.博取众人之长,才能扬长避短.本文中的内容主要是摘自<程序员的SQL金 ...
- C# 客户端判断服务器连接已断开
问题描述: 在C# Socket编程中,服务器端已经断开连接(发送数据方),客户端接收服务器端发送数据,在客户端使用client.Recieve()中,服务器端断开连接,客户端任然显示已 ...
- mvc 分页js
<script type="text/javascript"> var configA = { options: { m ...