大型补档计划

题目链接

考虑模拟这个过程。

\(f[i][0 / 1]\) 表示从第 \(i\) 个围栏的 左/右端点开始往下走,走到原点的最小花费。

转移很容易想到,就是考虑找到一个往下走第一个碰到的围栏 \(j (j < i)\) (若没有可以直接走到原点)。

然后 \(f[i][0 / 1] = min(f[j][0 / 1] + d_{相对距离})\)。考虑快速找到往下走最先遇到的围栏,就是一个线段覆盖动态问题,用线段树维护即可。

#include <cstdio>
#include <iostream>
using namespace std;
const int N = 30005, S = 200005, P = 100001;
typedef long long LL;
int n, m = P * 2, s, L[N], R[N], id[S << 2];
LL f[N][2];
int query(int p, int l, int r, int x) {
if (l == r) return id[p];
int mid = (l + r) >> 1;
if (x <= mid) return max(id[p], query(p << 1, l, mid, x));
else return max(id[p], query(p << 1 | 1, mid + 1, r, x));
}
void change(int p, int l, int r, int x, int y, int v) {
if (x <= l && r <= y) { id[p] = v; return; }
int mid = (l + r) >> 1;
if (x <= mid) change(p << 1, l, mid, x, y, v);
if (mid < y) change(p << 1 | 1, mid + 1, r, x, y, v);
}
int main() {
scanf("%d%d", &n, &s); s += P;
L[0] = R[0] = P;
for (int i = 1; i <= n; i++) {
scanf("%d%d", L + i, R + i); L[i] += P, R[i] += P;
int Lv = query(1, 1, m, L[i]), Rv = query(1, 1, m, R[i]);
f[i][0] = min(f[Lv][0] + abs(L[Lv] - L[i]), f[Lv][1] + abs(R[Lv] - L[i]));
f[i][1] = min(f[Rv][0] + abs(L[Rv] - R[i]), f[Rv][1] + abs(R[Rv] - R[i]));
change(1, 1, m, L[i], R[i], i);
}
printf("%d\n", min(f[n][0] + abs(L[n] - s), f[n][1] + abs(R[n] - s)));
return 0;
}

AcWing 329. 围栏障碍训练场的更多相关文章

  1. Acwing P298 围栏

    Analysis ①首先将所有粉刷匠,按照必须刷的小木块Si从小到大排序. 上面这个操作为了保证我们可以顺序处理. ②我们可以设f[i][j]表示为,前i个粉刷匠,刷了前i个木块.可以有些木块选择不刷 ...

  2. AcWing 298. 围栏 (POJ1821)

    标签(空格分隔): dp 单调队列优化 题目描述 有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次. 第 i 个木匠要么不粉刷,要么粉刷包含木板 \(S_i\) 的,长 ...

  3. csp-s 考前刷题记录

    洛谷 P2615 神奇的幻方 洛谷 P2678 跳石头 洛谷 P1226 [模板]快速幂||取余运算 洛谷 P2661 信息传递 LOJ P10147 石子合并 LOJ P10148 能量项链 LOJ ...

  4. Acwing:102. 最佳牛围栏(前缀和 + 二分)

    农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...

  5. AcWing 102. 最佳牛围栏

    农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大 ...

  6. AcWing 309. 装饰围栏

    题目链接 这道题与下一章的数位\(dp\)解题思路十分一致. 把寻找答案变成按位(并且是字典序从小到大)枚举当前这一位可以填的情况. 通过\(dp\)预处理的信息告诉我们可行性,就可以把答案紧逼到一个 ...

  7. Acwing-102-最佳牛围栏(二分,实数)

    链接: https://www.acwing.com/problem/content/104/ 题意: 农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过200 ...

  8. 跨越语言的障碍:C++/CLI 调用 C#

    首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...

  9. 创伤后应激障碍(PTSD)

    创伤后应激障碍(Post Traumatic Stress Disorder,PTSD)又称延迟性心因性反应(Delayed Psychogenic Reaction),是由应激性事件或处境而引起的延 ...

随机推荐

  1. 不小心清空了Ceph的OSD的分区表如何恢复

    前言 如果你是新手,应该出现过敲盘符的时候,敲错的情况,有些操作可能没什么问题,查询类的操作都没问题,但是写入的情况,就可能比较麻烦了,当然老手也可能有误操作,本篇将讲述在误操作把分区表给弄丢了的情况 ...

  2. ceph-deploy 部署加密osd异常的问题

    问题解析 问题 journal encryption with dmcrypt (Reno Rainz) 问题原文: I'm trying to setup a cluster with encryp ...

  3. this.getClass().getResource("") url path file 区别

    首先注意 "/word/appointDismiss.docx" 前面一定要加 /,有一次我就是忘记加/ 查了半天错, 不能写成 "word/appointDismiss ...

  4. 06 Vue路由简介,原理,实现及嵌套路由,动态路由

    路由概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源. 那么url地址和真实的资源之间就有一种对应的关系,就是路由. 路 ...

  5. Git-stash(暂存)

    修改某文件后,不想commit,使用stash保存在本地的某分支内 # 暂存 git stash ## 可暂存新增文件 git stash -u ## 为此次暂存添加标识 git stash save ...

  6. Rest语法,传入多个参数

    Rest语法,传入多个参数 js调用函数时可以传入任意数量的参数,而不报错.如果传入的参数没有用到,那么传入多余的参数没有任何用处,那不是瞎子点灯白费蜡嘛.为了充分利用传入的每一个参数,我们可以采用R ...

  7. Mybatis入门及第一个Mybatis程序

    Mybatis笔记整理 所需要的基础知识 JDBC Mysql Java基础 Maven Junit 框架:是有配置文件的.最好的方式:看官网文档 1.简介 1.1.什么是MyBatis 简介 什么是 ...

  8. C# 9.0新特性详解系列之三:模块初始化器

    1 背景动机 关于模块或者程序集初始化工作一直是C#的一个痛点,微软内部外部都有大量的报告反应很多客户一直被这个问题困扰,这还不算没有统计上的客户.那么解决这个问题,还有基于什么样的考虑呢? 在库加载 ...

  9. wsgi_uwsgi_nginx

    1.一些重要概念 https://www.cnblogs.com/xiaonq/p/8932266.html 1.1 web容器 什么是web容器 1.web容器是帮助我们部署java.php.pyt ...

  10. 论如何优雅的抛出SpringBoot注解的异常

    平时我们在写代码的时候肯定要进行很多参数验证,最开始的时候我们一般都是这样处理的  如下图   看起来好像也没什么,但是  如果参数多了呢?你就会看到这样的校验 OMG!!!  有没有感觉稍微有点视觉 ...