dp[i]表示前i棵树的最小体力消耗值
但是如果直接上肯定时间复杂度会爆炸 (N*Q*K)
N和Q已经无法优化
所以需要优化k 通过一种数据结构找到 k个位置中最合适的位置 从而达到N*Q的时间复杂度
 
线段树和树状数组略有吃力,所以需要根据题目的单调性需要单调队列。
 
什么情况需要优化呢?
1.当前的位置dp值相等 但比之前的k个数的中某个数大 那肯定保留大的
2.如果dp值不相等 肯定保留小的那个位置
 
代码实现前仔细思考!!!!

 1 #include <cstdio>
 2 #include <queue>
 3 #include <algorithm>
 4 #include <cstring>
 5
 6 inline int Read(){
 7     int x = 0,f = 1;
 8     char ch = getchar();
 9     while(ch < '0' || ch >'9'){
10         if(ch=='-') f = -1;
11         ch = getchar();
12     }
13     while(ch >= '0' && ch <= '9'){
14         x = x*10 + ch - '0';
15         ch = getchar();
16     }
17     return x*f;
18 }
19
20 int dp[1000005],num[1000005];
21 int n,m;
22 std::deque<int>Q;
23
24 int GetOut(int k){
25     memset(dp,0x3f3f3f3f,sizeof(dp));
26     Q.clear();
27     Q.push_back(1);
28     dp[1]=0;
29     for(int i=2;i<=n;i++){
30         //printf("fuck\n");
31         while(!Q.empty() && Q.front() < i - k) Q.pop_front();
32         dp[i] = dp[Q.front()] + (num[i] >= num[Q.front()]);
33         //printf("fuck\n");
34         while( !Q.empty() ){
35             if(dp[i] == dp[Q.back()]){
36                 if(num[i] > num[Q.back()]){
37                      Q.pop_back();
38                 }
39                 else break;
40             }
41             else{
42                 if(dp[i] < dp[Q.back()]){
43                     Q.pop_back();
44                 }
45                 else break;
46             }
47         }
48         Q.push_back(i);
49         //printf("%d\n",i);
50     }
51     return dp[n];
52 }
53
54 void init(){
55     n = Read();
56     for(int i=1;i<=n;i++){
57         num[i] = Read();
58     }
59     m = Read();
60     for(int i=1;i<=m;i++){
61         printf("%d\n",GetOut( Read() ));
62     }
63     return;
64 }
65
66 int main(){
67     init();
68     return 0;
69 }

转载于:https://www.cnblogs.com/OIerLYF/p/7496017.html

BZOJ 3831 POI2014 Litter Bird相关推荐

  1. 洛谷P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...

  2. P3572 [POI2014]PTA-Little Bird

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

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

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

  4. 【BZOJ 3831】【Poi2014】Little Bird(单调队列优化dp)

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

  5. Little Bird(BZOJ 3831)

    题目大意: 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在第i棵树,那么他可以跳到第i+1,i+2,...,i+k棵树. 如果MHY跳到一棵不矮于当前 ...

  6. BZOJ 3524: [Poi2014]Couriers【主席树】

    3524: [Poi2014]Couriers [题目描述] 传送门 [题解] 主席树的裸题,要找出现次数大于一半的,那么他肯定出现在当前的左子树或右子树中,就这样查找就可以了. 代码如下 #incl ...

  7. [Luogu P3571] [BZOJ 3835] [POI2014]SUP-Supercomputer

    洛谷传送门 BZOJ传送门 题目描述 给定一棵NNN个节点的有根树,根节点为111.QQQ次询问,每次给定一个KKK,用最少的操作次数遍历完整棵树,输出最少操作次数.每次操作可以选择访问不超过KKK个 ...

  8. BZOJ.3524.[POI2014]Couriers(主席树)

    题目链接 //119964kb 5780ms //主席树裸题啊.. #include <cstdio> #include <cctype> #define gc() getch ...

  9. bzoj 3521: [Poi2014]Salad Bar

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3521 POI的题果然都有一些很精妙的O(n)O(n)O(n)做法 带log的比较简单,这里就 ...

  10. little bird

    LITTLE BIRD Bzoj 3831 相对而言是一道比较简单的DP,不过它需要用单调队列优化.首先是朴素O(n2), if(d[j]>f[i]) f[i]=min(f[i],f[j]); ...

最新文章

  1. Java基础学习_01 概述及环境配置
  2. 在Linux下安装aws命令行操作
  3. 一文攻破结构体-C语言
  4. ITK:切割网格CutMesh
  5. 深入理解PHP Opcode缓存原理
  6. ASP.NET学习笔记(11)--ASP简介
  7. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程
  8. 每日一笑 | 在俄罗斯人眼里,没有什么是胶带解决不了的
  9. 编译原理:文法及其二义性(判定及消除)
  10. excel数据库_EXCEL憋出大招,逆袭大数据的黑马出现了
  11. Rust 能取代 Python,更好的实现神经网络?
  12. 动态规划 —— 求解二项式系数
  13. cartographer探秘第四章之代码解析(二) --- 传感器数据处理过程
  14. 点亮led灯的个数_点亮一个led灯程序
  15. 信息安全概论复习笔记
  16. 各种工作面板护眼模式颜色设置
  17. 北京云栖AI大热 驻云CloudCare揭云服务新趋势
  18. 女版乔布斯的覆灭,这是今年我听过最唏嘘的真人故事
  19. 【算法】牛和牛栏如何匹配到最大值
  20. 2016.3.18华为上机题:拼音转数字

热门文章

  1. 如何删除 Mac 上的 Office 许可证文件?
  2. 快速切换Mac系统设置One Switch
  3. Sensei for Mac(系统优化清理工具)
  4. 如何使用键盘快捷键在Mac上录制屏幕?
  5. 在Mac 上更改密码、用户图片或自动登录项
  6. MySQL 千万级 数据库或大表优化
  7. 扎克伯格正用“山寨”策略碾压Snapchat
  8. 关于微信公众号的测试
  9. 忆2015,迎2016(致敬自己)
  10. FileSync文件同步更新工具