Link

单调队列板子。

题目大意:一个点可以由距离它不超过\(k\)的点跳过来,如果那个点比它高就不需要花费体力,否则花费\(1\)的体力。问走到\(n\)的最小体力,多组询问。

显然的转移方程,设计\(dp_i\)表示跳到\(i\)的最小体力,枚举\(i-k \to i-1\)转移即可。

这东西显然\(O(n)\),复杂度爆炸。

我们用单调队列优化一波,维护的是一个区间具有单调性的下标。

我们每次插入一个点到队尾,即序列右端,插入之前,看看尾部的数:如果这个数的\(dp\)值大于要插入的这个数或者是\(dp\)值相等但高度要小,则把它踢出去。

那么这样我们维护了一个从左到右单调递增的一个\(dp\)序列。每次更新找最左端那个下标对应\(dp\)值更新即可。

实现上使用的双端队列,这题比较卡常,需要\(O_2\).复杂度是\(O(qn).\)

#include<bits/stdc++.h>
using namespace std; deque<int>q;
int n,Q,a[2000010];
int k,dp[2000010];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",a+i);
scanf("%d",&Q);
for(;Q;--Q){
scanf("%d",&k);q.clear();
q.push_back(1);
for(int i=2;i<=n;++i){
while(!q.empty()&&i-q.front()>k)q.pop_front();
if(a[q.front()]>a[i])dp[i]=dp[q.front()];
else dp[i]=dp[q.front()]+1;
while(!q.empty()&&(dp[q.back()]>dp[i]||(dp[q.back()]==dp[i]&&a[q.back()]<=a[i])))q.pop_back();
q.push_back(i);
}
printf("%d\n",dp[n]);
}
return 0;
}

【题解】PTA-Little Bird的更多相关文章

  1. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  2. 题解 P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 首先,这道题的暴力dp非常好写 就是枚举所有能转移到他的点,如果当前枚举到的位置的值大于 当前位置的话,\(f[i]=min(f[i],f ...

  3. 第一周PTA笔记 德州扑克题解

    德州扑克 最近,阿夸迷于德州扑克.所以她找到了很多人和她一起玩.由于人数众多,阿夸必须更改游戏规则: 所有扑克牌均只看数字,不计花色. 每张卡的值为1.2.3.4.5.6.7.8.9.10.11.12 ...

  4. 【题解笔记】PTA基础6-10:阶乘计算升级版

    题目地址:https://pintia.cn/problem-sets/14/problems/742 前言 咱目前还只能说是个小白,写题解是为了后面自己能够回顾.如果有哪些写错的/能优化的地方,也请 ...

  5. L1-057 PTA使我精神焕发

    以上是湖北经济学院同学的大作.本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在一行中按照样例输出,以惊叹号结尾. 输入样例: 无 输出样例: PTA shi3 wo3 ji ...

  6. NOIP2014题解

    NOIP2014题解 Day1 生活大爆炸版石头剪刀布 rps 简单模拟题,注意细节 #include<iostream> #include<cstdio> using nam ...

  7. 【NOIP&NOI】飞扬的小鸟 Flappy Bird

    描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...

  8. POI2014题解

    POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和 ...

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

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

随机推荐

  1. Mac 的命令行配置字体颜色

    1.在mac命令行终端输入: ls -al  查看所有隐藏文件,找到.bash_profile vi .bash_profile  编辑文件,贴入以下内容并保存 source .bash_profil ...

  2. Hihocoder 小Hi小Ho扫雷作死一二三

    这里贴下不用枚举方格是否为雷的方法 a表示输入标号,初始值为-1代表未探知 b表示当前格子是否有雷,初始化为0,0表示未探知,1表示探知肯定有雷,2表示探知肯定无雷(我也不知道为什么不初始化为-1,作 ...

  3. CA定义以及功能说明

    当您访问以HTTPS开头的网站时,即表示正在使用CA.CA是Internet的重要组成部分.如果不存在CA,那么将无法安全在线购物以及使用网银在线业务等.什么是CA?CA具体是做什么的,又是如何确保您 ...

  4. 搭建一个低配版的Mock Server

    mock翻译过来是模仿的意思,Server是服务器.粗暴点直译就是模仿服务器. 写在前面 通过阅读本文,你将对Mock的使用有一定的了解,对前后端分离的概念有了更深一步的认识,对Koa的使用有一定的了 ...

  5. Jenkins下Vue自动部署(二)

    1Jenkins配置 获取首次密码 sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 2 2.1J ...

  6. 微信小程序 部署(后台是springboot项目 前后台分流)

    微信小程序的部署需要https 和证书: https 需要反向代理: 这里用 nginx,无论linux,windows 系统都可以安装: 1.安装nginx ,这步自己去做: linux 安装ngi ...

  7. Node.js向MongoDB中插入并查询数据

    首先必须要保持Node.js与MongoDB保持连接 具体教程见:Node.js连接MongoDB数据库步骤 插入数据步骤如下 node项目文件如下:在routes文件夹下新建insert.js文件, ...

  8. memcached缓存:安装和清缓存

    一.安装步骤: 1.将工具一直解压,解压到最底层的exe目录

  9. java 集合删除数据

    public static void main(String[] args) { List<Integer> list = new ArrayList<>(Arrays.asL ...

  10. Java 中 static 的作用

    static 关键字的作用 在 Java 中 static 关键字有4种使用场景,下面分别进行介绍: 1.static 成员变量 public class Student { // 静态成员变量 pr ...