3831: [Poi2014]Little Bird

Time Limit: 20 Sec Memory Limit: 128 MB

Submit: 310 Solved: 186

[Submit][Status][Discuss]

Description

In the Byteotian Line Forest there are trees in a row. On top of the first one, there is a little bird who would like to fly over to the top of the last tree. Being in fact very little, the bird might lack the strength to fly there without any stop. If the bird is sitting on top of the tree no. , then in a single flight leg it can fly to any of the trees no.i+1,i+2…I+K, and then has to rest afterward.

Moreover, flying up is far harder to flying down. A flight leg is tiresome if it ends in a tree at least as high as the one where is started. Otherwise the flight leg is not tiresome.

The goal is to select the trees on which the little bird will land so that the overall flight is least tiresome, i.e., it has the minimum number of tiresome legs. We note that birds are social creatures, and our bird has a few bird-friends who would also like to get from the first tree to the last one. The stamina of all the birds varies, so the bird’s friends may have different values of the parameter . Help all the birds, little and big!

有一排n棵树,第i棵树的高度是Di。

MHY要从第一棵树到第n棵树去找他的妹子玩。

如果MHY在第i棵树,那么他可以跳到第i+1,i+2,…,i+k棵树。

如果MHY跳到一棵不矮于当前树的树,那么他的劳累值会+1,否则不会。

为了有体力和妹子玩,MHY要最小化劳累值。

Input

There is a single integer N(2<=N<=1 000 000) in the first line of the standard input: the number of trees in the Byteotian Line Forest. The second line of input holds integers D1,D2…Dn(1<=Di<=10^9) separated by single spaces: Di is the height of the i-th tree.

The third line of the input holds a single integer Q(1<=Q<=25): the number of birds whose flights need to be planned. The following Q lines describe these birds: in the i-th of these lines, there is an integer Ki(1<=Ki<=N-1) specifying the i-th bird’s stamina. In other words, the maximum number of trees that the i-th bird can pass before it has to rest is Ki-1.

Output

Your program should print exactly Q lines to the standard output. In the I-th line, it should specify the minimum number of tiresome flight legs of the i-th bird.

Sample Input

9

4 6 3 6 3 7 2 6 5

2

2

5

Sample Output

2

1

HINT

Explanation: The first bird may stop at the trees no. 1, 3, 5, 7, 8, 9. Its tiresome flight legs will be the one from the 3-rd tree to the 5-th one and from the 7-th to the 8-th.

Source

鸣谢zhonghaoxi

/*
n^2 DP.
然后T.
对于一个位置i.
从i-k+1~i处找最优转移.
(最长上升子序列类似).
由题意:(1)在i-k+1~i范围内f越小越优.
(2)在i-k+1~i范围内f相等时h越大越优.
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1000010
using namespace std;
int n,k,h[MAXN],f[MAXN],Q;
int read()
{
char ch=getchar();int f=1,x=0;
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-48,ch=getchar();
return x*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
h[i]=read();
Q=read();
while(Q--)
{
k=read();
memset(f,127/3,sizeof(f));
f[1]=0;
for(int i=1;i<=n;i++)
for(int j=i-k;j<i;j++)
{
if(j<=0)continue;
if(h[i]>=h[j])f[i]=min(f[i],f[j]+1);
if(h[i]<h[j])f[i]=min(f[i],f[j]);
}
printf("%d\n",f[n]);
}
return 0;
}
/*
wmy学姐说10^6要考虑o(n)的算法.
然后就用单调队列优化喽.
队头一直是最优元素.
所谓时效性是距离K.
以f为第一关键字(避免出现冲突).
其实这题貌似也可以用堆orz.
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1000001
using namespace std;
int f[MAXN],h[MAXN],n,m,k,q[MAXN];
int read()
{
char ch=getchar();int f=1,x=0;
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-48,ch=getchar();
return x*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++) h[i]=read();
m=read();
while(m--)
{
k=read();
int tail=1,head=1;
q[tail]=1;
for(int i=2;i<=n;i++)
{
while(head<=tail&&i-q[head]>k) head++;
if(h[i]>=h[q[head]]) f[i]=f[q[head]]+1;
else f[i]=f[q[head]];
while(f[i]<=f[q[tail]]&&head<=tail){
if(f[i]==f[q[tail]]&&h[i]<h[q[tail]]) break;
tail--;
}
q[++tail]=i;
}
printf("%d\n",f[n]);
}
return 0;
}

Bzoj 3831 [Poi2014]Little Bird的更多相关文章

  1. ●BZOJ 3831 [Poi2014]Little Bird

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3831 题解: 单调队列优化DP 定义 F[i] 为到达第i课树的疲劳值. 显然最暴力的转移就 ...

  2. BZOJ 3831: [Poi2014]Little Bird【动态规划】

    Description In the Byteotian Line Forest there are   trees in a row. On top of the first one, there ...

  3. 单调队列应用--BZOJ 3831 Little Bird

    3831: [Poi2014]Little Bird Time Limit: 20 Sec  Memory Limit: 128 MB Description In the Byteotian Lin ...

  4. BZOJ 3831

    3831: [Poi2014]Little Bird Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 121  Solved: 68[Submit][S ...

  5. bzoj3831 [Poi2014]Little Bird 单调队列优化dp

    3831: [Poi2014]Little Bird Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 505  Solved: 322[Submit][ ...

  6. 单调队列优化DP || [Poi2014]Little Bird || BZOJ 3831 || Luogu P3572

    题面:[POI2014]PTA-Little Bird 题解: N<=1e6 Q<=25F[i]表示到达第i棵树时需要消耗的最小体力值F[i]=min(F[i],F[j]+(D[j]> ...

  7. 【刷题】BZOJ 4543 [POI2014]Hotel加强版

    Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...

  8. P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 一只鸟从1跳到n.从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制k,求每次最少耗费多少体力 很简短的题目哼. ...

  9. 【BZOJ3831】[Poi2014]Little Bird 单调队列

    [BZOJ3831][Poi2014]Little Bird Description In the Byteotian Line Forest there are   trees in a row. ...

随机推荐

  1. ambari安装过程中的问题汇总

    今天重新安装ambari过程中,遇到了几个问题,耗费了我很长时间,在此记录一下 ambari重新安装可参考我之前的一篇随笔 http://www.cnblogs.com/6tian/p/4097401 ...

  2. 不同的jar里边相同的包名类名怎么区别导入

    今天在做项目的时候遇到了一个很有意思的问题,折磨了我很长时间,不过最终还是解决了,特留此文纪念一下. 遇到的问题: 同样一段代码,在同事那就好使,在我这就找不到一个方法.引用的包也都是相同的,这种问题 ...

  3. Hadoop学习记录(4)|MapReduce原理|API操作使用

    MapReduce概念 MapReduce是一种分布式计算模型,由谷歌提出,主要用于搜索领域,解决海量数据计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce( ...

  4. Mybatis上路_06-使用Java自动生成

    目录[-] 1.编写Generator执行配置文件: 2.在MyEclipse中建空web项目: 3.编写并执行Java程序: 4.查看并修改生成的文件: 5.测试,使用生成的文件查询: 1)导入My ...

  5. Android内存分析工具DDMS heap + MAT 安装和使用

    一  Java内存分析工具扫盲 如果像我一样一点都不了解,可以先进行内存分析工具扫盲   MAT介绍:     Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储 ...

  6. javascript网页弹出层练习

    网页中经常出现很多"popup"弹窗效果,这里做一个练习,给我们初学者一个参考. HTML代码: <div id="popup"></div& ...

  7. webstrom热键[持续更新]

    1.Ctrl+ Shift + A  --  为了加快寻找菜单命令或工具栏操作,你并不需要看菜单.只有按Ctrl+ Shift + A(说明|查找操作主菜单上),并开始输入动作的名称. . 2.Ctr ...

  8. RHCA442学习笔记-Unit11内存回收

       Unit 12 Memory Reclamation 内存回收            学习目标:                    A. 了解和调整内存回收                  ...

  9. (原创)speex与wav格式音频文件的互相转换

    我们的司信项目又有了新的需求,就是要做会议室.然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等. 如果是wav,m ...

  10. 【转载】NIO服务端序列图

    步骤一:打开ServerSocketChannel,用于监听客户端的连接,它是所有客户端连接的父管道,代码示例如下: ServerSocketChannel acceptorSvr = ServerS ...