整理的算法模板合集: ACM模板


目录

第二个方式维护单减
第三个方式维护单增

while(utop && a[i] <= a[stk_up[utop]]) {if(a[i] != a[stk_up[utop]])f[i] = min(f[i], f[stk_up[utop - 1]] + 1);utop -- ;
}

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;const int N = 500007, INF = 0x3f3f3f3f;
int n, m;
int stk_up[N], utop;
int stk_down[N], dtop;
int a[N];
int f[N];
int main()
{scanf("%d", &n);for(int i =1; i <= n;++ i)scanf("%d", &a[i]);memset(f, 0x3f, sizeof f);f[1] = 0;stk_down[++ dtop] = 1;stk_up[++ utop] = 1;for(int i = 2; i <= n; ++ i){f[i] = min(f[i], f[i - 1] + 1);//第一种方式//第二种方式,维护单减while(dtop && a[i] >= a[stk_down[dtop]]) {if(a[i] != a[stk_down[dtop]])f[i] = min(f[i], f[stk_down[dtop - 1]] + 1);dtop -- ;}//第三种方式,维护单增while(utop && a[i] <= a[stk_up[utop]]) {if(a[i] != a[stk_up[utop]])f[i] = min(f[i], f[stk_up[utop - 1]] + 1);utop -- ;}stk_down[++ dtop] = i;stk_up[++ utop] = i;}printf("%d\n",f[n]);return 0;
}

CF1407D Discrete Centrifugal Jumps(单调队列+DP)相关推荐

  1. CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)

    题目链接:点击查看 题目大意:给出 n 个大楼的高度记为 h,现在需要从第一个大楼到达第 n 个大楼,问最小步数是多少,只有满足以下条件时才能从 i 移动到 j ,设 i < j: 题目分析:无 ...

  2. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4381 题目大意 有n个岛,n条无向边(保证每个岛都有边连到).走过 ...

  3. P3580 [POI2014]ZAL-Freight(单调队列dp)

    P3580 [POI2014]ZAL-Freight(单调队列dp) 考虑两辆车怎么样是最优的. t1,t2,St_1,t_2,St1​,t2​,S t1+St_1+St1​+S 第一辆车:[t1,t ...

  4. CF #669 (Div. 2)D. Discrete Centrifugal Jumps(线段树/单调队列优化dp)

    https://codeforces.com/contest/1407/problem/D 题意:给定n个高度,当i<ji<ji<j且满足以下条件之一时,可以从iii跳到jjj: 问 ...

  5. 刷题总结——烽火传递(单调队列+dp)

    题目: 题目描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有 n 个烽火台,每个烽火 ...

  6. POJ 1821 单调队列+dp

    题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...

  7. P3957-跳房子【单调队列,dp,二分】

    前言 链接: https://www.luogu.org/record/show?rid=7915892 这就是之前普及组的第四题- 大意 有n个格子,每个格子有价值.机器人有固定的跳跃距离d,用k个 ...

  8. BZOJ 1791 岛屿(环套树+单调队列DP)

    题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...

  9. codeforces - 1216F WIFI(单调队列+DP)

    传送门 题意:有n个房间,需要把n个房间全部连上网,可以使用i的代价直接将第i个房间连上网.有一些房间可以放路由器,代价也是他的标号i,路由器可以使得i-k,到i+k之间所有房间通上网,求最小代价使得 ...

最新文章

  1. Xcode+OpenCV3.4.0 折腾(2)
  2. Python批量修改文件格式
  3. 支持本地 持久化的 单机版 consul 服务
  4. windows live writer向cnblog发布文章设置(转)
  5. 《赛博朋克2077》是如何将人物表情和口型本地化的?
  6. 【CSP201312-4】有趣的数(数位DP)
  7. [转载] JAVA的throw用法及扩展
  8. inventor整理资源中心收藏夹
  9. tomcat日志配置——如何查看日志
  10. spring学习-01编译spring5.0源码(亲测可用)
  11. flutter中的点击事件
  12. (火星)MBTI职业性格测试
  13. vue-router路由history模式+nginx部署项目到非根目录下(实践版)
  14. 英文论文写作注意事项整理
  15. win10计算机如何调到桌面上,win10系统下怎么将计算器放在桌面上
  16. 微信公众号菜单栏设置直接打电话拨号一键拨号
  17. (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计
  18. C++算法:三种方法求最大公约数和最小公倍数
  19. 自由浏览器 android,百度浏览器发布安卓6.1版 趣味视频弹幕吐槽不停
  20. stm32中断源有哪些_143条 超详细整理STM32单片机学习笔记(必看)

热门文章

  1. 工业相机帧率与曝光时间的关系
  2. 基于python和OpenCV构建智能停车系统
  3. Transformer 超详细解读,一图胜千言
  4. 机器人是如何规划路径的?动画演示一下吧
  5. 基于多阈值注意U-Net(MTAU)的MRI多模态脑肿瘤分割模型
  6. 戈峻:英特尔推动嵌入式教育 意在双赢
  7. Linux命令(30):tar命令-归档工具
  8. 在Linux中打印函数调用堆栈【原创】
  9. Oracle中的系统权限管理
  10. mysql教程左右链接_mysql的左右内连接用法实例