前情提要

是的 我终于回来补坑了

一年了哇 你这个鸽子王

斜率优化版本

今天在复习斜率优化的时候才想起来这个题

定义就不设了 大家想看可以看上面那个原版

怎么斜率优化呢?

我们考虑\(i\)点是当前的目标状态 \(j\)点是当前的最优决策

则有如下这个式子

\(f_i = i\ *\ (cnt_i - cnt_j)\ -\ (sum_i\ -\ sum_j)\ +\ f_j\)



\(f_i = i\ *\ cnt_i\ -\ i\ *\ cnt_j\ -\ sum_i\ +\ sum_j\ +\ f_j\)

根据斜率优化的套路

把和\(j\)有关的放在左边 \(同时和i和j的项放在中间\) \(只和i有关的放在右边\)

\(f_j\ + sum_j\ =\ i\ *\ cnt_j\ +\ f_i\ - \ sum_i\ +\ i\ *\ cnt_i\)

\(f_j + sum_j\)是\(y\)

\(i\)是\(k\)

\(cnt_j\)是\(x\)

\(f_i\ - \ sum_i\ +\ i\ *\ cnt_i\)是\(b\)

接下来就是常规操作了 对于\(i\) 在队列中压入\(i - m\) 维护一个斜率的下凸包即可

代码

#include <cstdio>
#include <algorithm> const int maxT = 4000105; int n, m, t, ti, ans = 1e9, l = 1, r, cnt[maxT], sum[maxT], q[maxT], f[maxT]; inline double getSlope(int u, int v) { return (double) (f[v] + sum[v] - f[u] - sum[u]) / (cnt[u] == cnt[v] ? 1e-9 : cnt[v] - cnt[u]); } int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &ti); t = std::max(t, ti);
cnt[ti]++; sum[ti] += ti;
}
for (int i = 1; i < t + m; i++) { cnt[i] += cnt[i - 1]; sum[i] += sum[i - 1]; } // 前缀和.
for (int i = 0; i < t + m; i++) {
if (i - m >= 0) {
while (l < r && getSlope(q[r - 1], q[r]) >= getSlope(q[r], i - m)) { r--; }
q[++r] = i - m; // 把可能成为最优解的推入队列.
}
while (l < r && getSlope(q[l], q[l + 1]) <= i) { l++; } // 把不可能成为最优解的弹出队列.
f[i] = cnt[i] * i - sum[i]; // 特判边界情况.
if (l <= r) { f[i] = std::min(f[i], f[q[l]] + (cnt[i] - cnt[q[l]]) * i - (sum[i] - sum[q[l]])); } // 斜率优化转移.
}
for (int i = t; i < t + m; i++) { ans = std::min(ans, f[i]); }
printf("%d\n", ans);
return 0;
}

【NOIP 2018】摆渡车的更多相关文章

  1. [OI]Noip 2018总结(普及)

    考砸了,还有原谅我代码十分有限的可读性. 一个人的真正伟大之处就在于他能够认识到自己的渺小.——保罗 从一年前初一九月到现在18年10月接触OI已经有一年了.几次模拟赛也自我感觉良好,都过了一等的线, ...

  2. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

  3. noip 2018 D1T3 赛道修建

    noip 2018 D1T3 赛道修建 首先考虑二分答案,这时需要的就是对于一个长度求出能在树中选出来的最多的路径条数.考虑到一条路径是由一条向上的路径与一条向下的路径构成,或者仅仅是向上或向下的路径 ...

  4. NOIP 2018 总结

    NOIP 2018 总结 提高组: 应得分 \(100 + 100 + 40 + 100 + 50 + 44 = 434\). 考后期望得分 \(100 + 100 + 20 + 100 + 50 + ...

  5. noip 2018 d2t1 旅行

    noip 2018 d2t1 旅行 (题目来自洛谷) 给定n个城市,m条双向道路的图, 不存在两条连接同一对城市的道路,也不存在一条连接一个城市和它本身的道路.并且, 从任意一个城市出发,通过这些道路 ...

  6. NOIP 2018 真・退役记

    目录 NOIp 2018 真・退役记 7.01 7.05 \(summary\) 7.12 7.18 7.26 - 7.27 8.2 8.3 8.3 8.7 8.9 8.20 8.24 8.27 8. ...

  7. [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解

    啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ...

  8. Before NOIP 2018

    目录 总结 刷题 2018 - 9 - 24 2018 - 9 - 25 2018 - 9 - 26 2018 - 9 - 27 2018 - 9 - 28 2018 - 9 - 29 2018 - ...

  9. My thoughts after NOIP 2018(1)

    联赛就这样结束了. 感觉真是奇怪啊.以前看重的东西,像是忽然扔下的包袱,一下子轻了. 而我一直在逃避的,不愿直面的东西,果然终于还是要再次面对了啊. 文化课百废待兴,\(noip\)的最终结果依然未知 ...

随机推荐

  1. Flask 易错点

    1.With上下文管理器 常用: with open("file_name","wb") as f: f.write("hello flask&quo ...

  2. PyCharm永久破解方法,2021最新版本!!!

    1,下载破解补丁(已更新到2021.1版本): 关注微信公众号<程序员的时光>,回复破解补丁即可: 下载补丁文件 jetbrains-agent.jar 和importat.txt文件并将 ...

  3. vue3.x非兼容的变更

    走马观花似的看看从vue2.x开始到vue3.x的一些非兼容性的变更,这样在将来升级过程中遇到那些奇奇怪怪的不能用的时候,就会很容易解决啦. 全局 API 全局 Vue API 已更改为使用应用程序实 ...

  4. Git: 搭建一个本地私人仓库

    Git: 搭建一个本地私人仓库 寝室放个电脑.实验室也有个电脑 为进行数据同步,充分利用实验室的服务器搭建了个本地私人仓库 1. 安装流程 当然首先保证服务器上与PC机上都已经安装了可用的Git 在P ...

  5. 学习手册 | MySQL篇 · 其一

    InnoDB关键特性 插入缓冲(Insert Buffer) 问题:   在InnoDB插入的时候,由于记录通常都是按照插入顺序,也就是主键的顺序进行插入的,因此,插入聚集索引是顺序的,不需要随机IO ...

  6. 如何洗白xi校长?(初稿)

    看看咱们太子殿下,谁还敢黑全世界最好的太子殿下 我们不如来考虑一下如何给校长洗白. 第一当然是买断热搜了.买断热搜可以阻止消息进一步传播.当然这种操作学校再8月18日晚就已经做过了.8月18日该条消息 ...

  7. CSP踩被记

    本来想起个清新脱俗的标题,但碍于语文功底不行,于是光明正大嫖了LiBoyi的高端创意,把这篇博客命名为踩被记. Day -6 用假暴力把真正解拍没了,伤心.Rp有点低 Day -4 信息学考,\(py ...

  8. 攻防世界 杂项15.János-the-Ripper

    下载附件并解压,我用的是WinHex打开,发现是PK开头,并且文件中包含一个flag.txt文件,应该就是我们所需要的flag. 把下载的附件改后缀为.zip,确实有我们需要的flag,打开后需要密码 ...

  9. HDC2021:HMS Core分析服务,数智化营销闭环方案帮助开发者实现精益增长

    10.22-10.24华为开发者大会2021(Together)在东莞如期举行.本次大会上,HMS Core华为分析服务作为多平台.跨设备的一站式数据分析平台以数据驱动业务智能决策为理念,带来了数智化 ...

  10. Jenkins MultiJob

    前提:项目有十几个服务每次发版/更新服务需要一个个去编译 目的:希望能够建立一个任务一次构建可以批量编译很多服务,并且需要输入一个参数指定编译的分支 需要插件: MultiJob 安装插件 1.在Je ...