题意

题目链接

Sol

傻叉的我以为给出的\(t\)是单调递增的,然后\(100\rightarrow0\)

首先可以按\(t\)排序,那么转移方程为

\(f[i] = min_{j=0}^{i-1}(max(t[i], f[j]) + 2 * max_{k=j+1}^i x[k])\)

不难发现,若\(i < j\)且\(x[i] < x[j]\),那么从\(i\)转移过来一定是不优的,一定是从\(i\)之前的某个位置转移过来。(f单增)

然后直接单调队列搞一搞就行了,

#include<bits/stdc++.h>
#define Pair pair<int, int>
#define fi first
#define se second
#define LL long long
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
char buf[(1 << 22)], *p1 = buf, *p2 = buf;
using namespace std;
const int MAXN = 1e6 + 10;
template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, q[MAXN], val[MAXN], top;
LL f[MAXN];
Pair a[MAXN];
signed main() {N = read(); for(int i = 1; i <= N; i++) a[i].fi = read(), a[i].se = read();sort(a + 1, a + N + 1);for(int i = 1; i <= N; i++) {while(top && a[i].se > a[top].se) top--;a[++top] = a[i];}memset(f, 0x7f, sizeof(f));N = top; f[0] = 0;int l = 1, r = 0, las = 0;for(int i = 1; i <= N; i++) {while(l <= r && a[i].fi >= f[q[l]]) las = q[l++];if(las < i) chmin(f[i], a[i].fi + 2ll * a[las + 1].se);if(l <= r) chmin(f[i], val[l]);int cur = f[i] + 2ll * a[i + 1].se;while(l <= r && cur <= val[r]) r--;q[++r] = i; val[r] = cur;}cout << f[N];return 0;
}

转载于:https://www.cnblogs.com/zwfymqz/p/10590303.html

noi.ac #289. 电梯(单调队列)相关推荐

  1. Leetcode1696. 跳跃游戏 VI[C++题解]:dp和单调队列求滑动窗口最值

    文章目录 题目分析 题目链接 单调队列板子链接 Deque知识补充 题目分析 题目重述:给定一个数组(有正数有负数)和一个步长k,从下标0处开始往前跳,每次最多往前跳k步.求跳到最后一个位置,得分之和 ...

  2. 单调队列板子:求滑动窗口中最大值和最小值

    文章目录 题目分析 初始思路 单调队列优化的思路 代码1:数组模拟单调队列的代码 代码2:deque容器实现 能用到单调队列的情景比较有限: 1.典型的有滑动窗口的最值, 2.找到里它最近的比它大(小 ...

  3. hdu 4362(单调队列优化dp)

    题意:有m个阶段,每个阶段都有n个龙珠,当在某一阶段选择一个龙珠,该阶段其他龙珠都会消失.给出两个m*n的矩阵,第一个矩阵表示消灭第i个阶段第j个龙珠的位置,第二个矩阵表示取第i个阶段第j个龙珠消耗的 ...

  4. 算法竞赛入门与进阶 (二)单调队列、单调栈

    栈(stack)和队列( queue ) 1.栈的定义:栈是限定仅在表头进行插入和删除操作的线性表(先进后出) 2.队列的定义:队列是一种特殊的线性表,特殊之处在于 它只允许在表的前端(front)进 ...

  5. [DP/单调队列]BZOJ 2059 [Usaco2010 Nov]Buying Feed 购买饲料

    首先我想吐槽的是题目并没有表明数据范围... 这个题目 DP方程并不难表示. dp[i][j]表示前i个地点携带了j个货物的最小花费 dp[i][j] = dp[i-1][k] + (j-k) * c ...

  6. 单调队列优化多重背包

    就是按照 % 体积的余数来分组,每组单调队列优化. 直接上模板好了. 1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 cons ...

  7. 【学习笔记】多重背包相关优化——二进制优化/单调队列优化

    多重背包--二进制优化/单调队列优化 二进制优化 单调队列优化 代码都是 POJ1742 的,注意,那道题二进制优化会超时. 普通的多重背包式子,物品个数限制:c[i]c[i]c[i],单个物品价值 ...

  8. 牛客练习赛79E-小G的数学难题【dp,单调队列】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出nnn个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai​,bi​,ci ...

  9. [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)

    4182: Shopping Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 374  Solved: 130 [Submit][Status][Di ...

  10. [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)

    4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1567  Solved: 718 [Submit][Statu ...

最新文章

  1. Java实现图的深度和广度优先遍历算法
  2. 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...
  3. linux考试基础知识测验
  4. homebrew安装mysql
  5. Flume在企业大数据仓库架构中位置及功能
  6. mac下配置openfire
  7. mysql A库a表 B库b表 将a表导入b表中
  8. JQuery获取第几个元素和判断元素在第几个
  9. java1.6升级1.7_jdk从1.6升级到1.7可能会遇到的Version问题
  10. Java单例模式实现(线程安全)
  11. atitit.流程标准化--- mysql启动不起来的排查流程attilax总结
  12. MYSQL SHOW VARIABLES简介
  13. 在IE浏览器里打开谷歌
  14. Sqoop常用命令回顾
  15. 如何用python自动改试卷_2019Python100道面试题,你会几道?
  16. 激光打印机工作原理1
  17. 刚从阿里、头条面试回来,熬夜整理华为最新Java笔试题,进阶学习
  18. 分支限界算法 之 A*算法(启发式搜索算法)---九宫重排游戏(也称八数码问题)
  19. 第一篇——从这里开始
  20. Snipaste工具推荐

热门文章

  1. 【COLING2020】面向方面级情感分类的注意力转移网络
  2. 什么时候以及为什么基于树的模型可以超过神经网络模型?
  3. 【注意力机制】一系列关于attention的高效改进大集合
  4. 智能对话训练师进阶本领:复杂对话流程处理
  5. 一段平平无奇的秋招经历
  6. 每日算法系列【LeetCode 123】买卖股票的最佳时机 III
  7. 每日算法系列【LeetCode 122】买卖股票的最佳时机 II
  8. missingno库—缺失值可视化
  9. pandas之map(), apply()和applymap()
  10. tf.concat用法总结