POJ3264:Balanced Lineup——题解+st表解释
我早期在csdn的博客之一,正好复习st表就拿过来。
http://write.blog.csdn.net/mdeditor#!postId=63713810
这道题其实本身不难(前提是你得掌握线段树或者st表当中的一种)
那么这道题我们来讲一讲st表(因为这题询问次数有点多)
一般关系式
dp[i][j]=min/max(dp[dp[i][j-1],dp[i+pow(2,j-1)][j-1]])
可以看出来吧,其实这就是动态规划
好的我们来解释一下关系式是什么吧
首先这个是一个二分,具体是什么呢:
其中的i代表起点,2^j代表起点到中点的长度。
如果还不懂的话,我们来看一下样例(求最小值)
2 6 4 8 9 7 11
好的,我们来模拟一下程序的运作
dp[1][0]=2;dp[2][0]=6……dp[7][0]=11;
然后dp[1][1]=min(2,6)=2; dp[3][1]=min(4,8)=4;……dp[6][1]=min(7,11)=7;
再然后dp[1][2]=min(2,4)=2;……
如此这般如此这般
怎么样,给一个样例是不是就很清楚了。
然后就是查询了,但是有时候因为查询区间比较大,没办法一步到位怎么办
例如查询1-5的区间,然而按照我们上面的定义来的话,我们最大可以调用dp[1][2],然而却落了第五个点。
其实很简单,结果=min(dp[1][2],dp[2][2])
原因也无需解释了吧
那么我们用代码实现吧,顺便把这道题写了吧
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int maxn[][],minn[][];
int qpow(int a){
return (<<a);
}
void st(int n){
for(int j=;j<=int(log2(n));j++){
for(int i=;i<=n;i++){
int p=i+pow(,j)-;
if(p>n)continue;
maxn[i][j]=max(maxn[i][j-],maxn[i+int(qpow(j-))][j-]);
minn[i][j]=min(minn[i][j-],minn[i+int(qpow(j-))][j-]);
}
}
return;
}
int main(){
int n,q,k,x,y;
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++){
scanf("%d",&maxn[i][]);
minn[i][]=maxn[i][];
}
st(n);
for(int i=;i<=q;i++){
scanf("%d%d",&x,&y);
if(y<x){
int t=x;x=y;y=t;
}
double s=y-x+;
int ke=log2(s);
int he=qpow(int(log2(s)));
int t1=max(maxn[x][int(log2(s))],maxn[y-he+][ke]);
int t2=min(minn[x][int(log2(s))],minn[y-he+][ke]);
printf("%d\n",t1-t2);
}
return ;
}
POJ3264:Balanced Lineup——题解+st表解释的更多相关文章
- 【洛谷】P2880 [USACO07JAN]平衡的阵容Balanced Lineup(st表)
题目背景 题目描述: 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
- 洛谷 P2880 [USACO07JAN]Balanced Lineup G (ST表模板)
题意:给你一组数,询问\(q\)次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N ...
- Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup (ST表模板)
传送门(ST表裸题) ST表是一种很优雅的算法,用于求静态RMQ 数组l[i][j]表示从i开始,长度为2^j的序列中的最大值 注意事项: 1.核心部分: ; (<<j) <= n; ...
- [POJ3264]Balanced Lineup(RMQ, ST算法)
题目链接:http://poj.org/problem?id=3264 典型RMQ,这道题被我鞭尸了三遍也是醉了…这回用新学的st算法. st算法本身是一个区间dp,利用的性质就是相邻两个区间的最值的 ...
- poj3264 - Balanced Lineup(RMQ_ST)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 45243 Accepted: 21240 ...
- POJ3264 Balanced Lineup
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 44720 Accepted: 20995 ...
- poj 3264 Balanced Lineup 题解
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Subm ...
- poj3264Balanced Lineup(倍增ST表)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 52328 Accepted: 24551 ...
随机推荐
- Javascript闭包例子
闭包的概念 内层的函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止.可理解为,闭包就是能够读取其他函数内部变量的函数. 表现形式是:定义在函数内部的函数. function f1() ...
- 角色 RESOURCE、CONNECT、DBA具有的权限
角色 RESOURCE.CONNECT.DBA具有的权限 select grantee,privilege from dba_sys_privs where grantee='RESOURCE' or ...
- WeTest功能优化第2期:云真机智能投屏,调试告别鼠标
第2期功能优化目录 [云真机视频映射]云真机画面本地映射[兼容性测试报告]新增问题机型聚类功能[新增Android9.0]同步上线最新安卓系统 本期介绍的云测产品功能优化,既有重磅级技术突破,也有报告 ...
- 「题目代码」P1054~P1059(Java)
P1054 猴子吃桃 import java.util.*; import java.io.*; import java.math.BigInteger; import java.lang.Chara ...
- 安装SQLSEVER与MySQL
昨天装了一整填的SQLSEVER,今天是把昨天遗留的问题给重新整合一下,上午安装MySQL的时候,是在网上找的帖子通过压缩包安装的,捣鼓了一上午,下午花不到一个小时, 去安装好了,我觉得通过压缩包安装 ...
- Javascript打印网页局部的实现方案
项目中,需要对页面的部分div进行打印,为了保证界面布局不乱,采取了新建iframe的方法. 将需要打印的div放到iframe中,然后调用iframe进行打印,就可以很好的实现局部打印的效果了. 同 ...
- python基本数据类型——集合
集合 无序可变序列,集合中元素不允许重复,即每个元素都是唯一的 集合中的元素按照升序排列 # 创建集合 >>aset = set([0,2,4,5,7,2,3,5,9,0]) >&g ...
- 最短路径算法(II)
什么??你问我为什么不在一篇文章写完所有方法?? Hmm…其实我是想的,但是博皮的加载速度再带上文章超长图片超多的话… 可能这辈子都打不开了吧… 上接https://www.cnblogs.com/U ...
- 机器人控制tcp通信参数调优
机器人使用WiFi通信,实现指令下传,状态上传.而WiFi信道平时带宽较稳定,但会在某些时候突然中断,造成ping的延时较高,但可以马上恢复.如果一直ping,则一般情况下ping值很小,但长时间(数 ...
- 转:Linux 编译安装 Mysql5.7
http://broqiang.com/2017/04/18/Mysql-Install-5.7.18-Linux-Compile/ 原文 Linux 编译安装 Mysql5.7 Ubuntu 下快速 ...