POJ 3264 RMQ问题 用dp解决
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = ;
#define INF 0x3f3f3f3f
int maxn[N<<][] , minn[N<<][] , a[N]; void build_dp(int n)
{
memset(maxn , , sizeof(maxn));
memset(minn , 0x3f , sizeof(minn));
for(int i= ; i<n ; i++) minn[i][]=maxn[i][]=a[i];
for(int j= ; (<<(j-))<n ; j++){
for(int i= ; i<n ; i++){
minn[i][j] = min(minn[i][j-] , minn[i+(<<(j-))][j-]);
maxn[i][j] = max(maxn[i][j-] , maxn[i+(<<(j-))][j-]);
}
}
} int get_index(int len)
{
int ans= , l=;
while(l<len){
l<<=;
ans++;
}
return ans-;
} int main()
{
// freopen("a.in" , "r" , stdin);
int n , q , s , t;
while(~scanf("%d%d" , &n , &q))
{
for(int i= ; i<n ; i++){
scanf("%d" , &a[i]);
}
build_dp(n);
for(int i= ; i<q ; i++){
scanf("%d%d" , &s , &t);
s-- , t--;
int len=t-s+ , maxVal= , minVal=INF;
if(s == t){
maxVal = maxn[s][];
minVal = minn[s][];
}else{
int k=get_index(len);
maxVal = max(maxn[s][k] , maxn[t-(<<k)+][k]);
minVal = min(minn[s][k] , minn[t-(<<k)+][k]);
}
printf("%d\n" , maxVal-minVal);
}
}
return ;
}
原来也做过这道题,不过今天刚看完RMQ的ST算法,就用dp的方式再写了一遍
原来用线段树来解决这个问题的,但是这里并不需要节点的更新操作,只是询问,所以在这种情况下,是可以用ST算法来解决这个问题的
POJ 3264 RMQ问题 用dp解决的更多相关文章
- POJ 3264 RMQ裸题
POJ 3264 题意:n个数,问a[i]与a[j]间最大值与最小值之差. 总结:看了博客,记下了模板,但有些地方还是不太理解. #include<iostream> #include&l ...
- poj 3264 RMQ 水题
题意:找到一段数字里最大值和最小值的差 水题 #include<cstdio> #include<iostream> #include<algorithm> #in ...
- poj 3264 RMQ
直接写个RMQ就能过. #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- POJ 3264 RMQ水题
题目大意就是有很多牛.告诉你每只牛的高度.然后有很多个询问.输出该区间内的最大身高差.也就是用RMQ求最大值最小值.貌似还可以用线段树.然而,我还不会线段树.....T_T 可能是太多组数据了.cin ...
- poj 3264(RMQ或者线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 42929 Accepted: 20184 ...
- 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)
点我看题目 题意 :N头奶牛,Q次询问,然后给你每一头奶牛的身高,每一次询问都给你两个数,x y,代表着从x位置上的奶牛到y位置上的奶牛身高最高的和最矮的相差多少. 思路 : 刚好符合RMQ的那个求区 ...
- POJ 1018 Communication System(DP)
http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...
随机推荐
- Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)
Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...
- Linux tcpdump命令英文文档
https://www.computerhope.com/unix/tcpdump.htm
- HttpURLConnection与HTTP Client的区别,及多用前者
转自: http://android-developers.blogspot.jp/2011/09/androids-http-clients.html Level 9以前用client,以后用url ...
- UML 用例图(转载)
UML是系统架构设计师考试的一个重要考点,需要考生掌握.但是有些考生,在学习的过程中会有这样的疑问,在敏捷开发时代,UML还有没有必要去学习? UML还是有用的,主要用在设计和分析阶段,但是UML不适 ...
- IIS7 网站发布
选择“网站” 添加网站
- java课程设计全程实录——第2天
[反思] 今天主要完成JDBC数据的连接,查阅了大量博客和书籍,繁琐而细碎.但所幸还是连上了. [日常烦心事] 下午准备用idea连测试连接的,结果电脑跑不动....CPU一度100%居高不下,ide ...
- 常用linux命令大全 转载自:https://www.cnblogs.com/laov/p/3541414.html(大牛笔记)
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...
- VB6程序中NULL注意事项
VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出. 通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如 rsMoney.F ...
- A/B宣言
作者:Dunne & Raby A B 肯定的 批判的 解决问题的 发现问题的 设计即流程 设计即方法 给出答案 问问题 为行业中服务 为社会服务 说明世界是怎样的 说明世界可能是怎样的 科 ...
- ActiveSync日志分析
Here are the steps to exporting the ActiveSync log data: Create a folder on the root of C:\ ...