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 ...
随机推荐
- 在myeclipse中使用Java语言进行spark Standalone模式应用程序开发
一.环境配置 Myeclipse中虽然已经集成了maven插件,但是由于这个插件版本较低,建立maven project会出现错误. 解决办法:自己到官网http://maven.apache.org ...
- 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi
个人总结: Arduino就是个AVR单片机,个人觉得更适合玩电子的,社区也很活跃. BeagleBone是ARM Cortex-A8,属于嵌入式,价格高于Pi,但是许多方面拥有超越 Pi 的优 势, ...
- hibernate中增加annotation @后不提示信息【转】
此文转自:http://blog.knowsky.com/252047.htm 所需要用到的3个jar包分别是: hibernate-annotations.jar ejb3-persistence. ...
- C# 该行已经属于另一个表 的解决方法[转]
该文转自:http://blog.sina.com.cn/s/blog_48e4c3fe0100nzs6.html DataTable dt = new DataTable(); dt = ds.Ta ...
- Codeforces Round #285 (Div. 1) A. Misha and Forest 拓扑排序
题目链接: 题目 A. Misha and Forest time limit per test 1 second memory limit per test 256 megabytes 问题描述 L ...
- Mysql登录异常的一个问题:
问题描述: 正常在启动mysql的时候是这样的: 1. win打开输入界面: 2. 输入cmd命令,鼠标右键选择“以管理员身份运行”: 3, 之后再在界面输入登录mysql的登录语句: mysq -u ...
- C#文件对话框,一次多选文件设置
OpenFileDialog ofd = new OpenFileDialog();ofd.Multiselect = true;if (ofd.ShowDialog() == DialogResul ...
- Emmet快速编写CSS样式
基本的CSS样式编写时,很多样式只需输入首字母即可得到不带属性值的CSS样式,像上面说到的margin. 1.而对于一些带有特定的属性值的CSS样式,只需输入CSS标签与属性值的首字母就可以,比如: ...
- Unity3D研究院之IOS全自动打包生成ipa
接着上一篇文章, 自动生成framework,这篇文章我把shell自动化打包ipa整理了一下,希望大家喜欢,嘿嘿.. 建议大家先看一下上一篇文章.http://www.xuanyusong.com/ ...
- ECMALL目录结构设置与数据库表
[Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...