BZOJ3387栅栏行动



首先,很容易想到Dp。设f[i][0]表示第i个栅栏走左边的最短路,f[i][1]表示第i个栅栏走右边的最短路。

所以,我们要找一个刚好在第i个栅栏的左右边界下面的栅栏。如图所示:


则有:

f[i][0] = min(f[k][0] + |Left[i] - Left[k]| , f[k][1] + |Left[i] - Right[k]| )

f[i][1] = min(f[j][0] + |Right[i] - Left[j]| , f[j][1] + |Right[i] - Right[j]| )


那么,该怎样求k和j呢?

很容易想到开一个数组,从小到大覆盖。但这样的时间复杂度是O(n^2)的。用线段树区间修改,单点查询就可以了。

附上程序:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <bitset>
#include <fstream>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctime>
#include <deque>
#include <vector>
#include <complex>
#include <utility>
using namespace std;
typedef long long LL;
#define INF 0x3fffffff
#define Maxn 100010int num[Maxn<<1];
int f[Maxn][2];int n,m;int a[Maxn],b[Maxn];#define L(u) u<<1
#define R(u) u<<1|1struct Tnode{int l,r;bool isset;int set;
};
Tnode tr[Maxn<<3];void build(int u,int l,int r)
{tr[u].l = l; tr[u].r = r;tr[u].isset = true; tr[u].set = 0;if(l<r){int mid = (l+r)>>1;build(L(u),l,mid);build(R(u),mid+1,r);}
}void pushdown(int u)
{if(tr[u].isset){tr[L(u)].isset = tr[R(u)].isset = true;tr[L(u)].set = tr[R(u)].set = tr[u].set;tr[u].isset = tr[u].set = 0;}
}void update(int u,int l,int r,int val)
{if(l<=tr[u].l && tr[u].r<=r){tr[u].isset = true;tr[u].set = val;return;}pushdown(u);int mid = (tr[u].l+tr[u].r)>>1;if(mid>=l) update(L(u),l,r,val);if(mid<r) update(R(u),l,r,val);
}int query(int u,int p)
{if(tr[u].l==tr[u].r)return tr[u].set;pushdown(u);int mid = (tr[u].l+tr[u].r)>>1;if(p<=mid) return query(L(u),p);else return query(R(u),p);
}int main()
{	scanf("%d%d",&n,&m);build(1,1,Maxn<<1);a[n+1] = b[n+1] = m;for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);int k1,k2;for(int i=1;i<=n+1;i++){k1 = query(1,a[i]+100005);k2 = query(1,b[i]+100005);f[i][0] = min(f[k1][0]+abs(a[i]-a[k1]),f[k1][1]+abs(a[i]-b[k1]));f[i][1] = min(f[k2][0]+abs(b[i]-a[k2]),f[k2][1]+abs(b[i]-b[k2]));if(a[i]+1<b[i])update(1,a[i]+100005+1,b[i]+100005-1,i);}printf("%d\n",f[n+1][0]);return 0;
}


转载于:https://www.cnblogs.com/ouqingliang/p/9245248.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

udacity开源的数据_评论:Udacity数据分析师纳米学位计划

udacity开源的数据by David Venturi大卫文图里(David Venturi) 评论&#xff1a;Udacity数据分析师纳米学位计划 (Review: Udacity Data Analyst Nanodegree Program) Udacity’s Data Analyst Nanodegree program was one of the first online data science programs in the …

凌晨四点钟深圳的风景

科比有过一句很励志的故事&#xff1a;凌晨四点钟洛杉矶的风景。 很多人把科比当成榜样&#xff0c;不仅仅因为他精湛的球技&#xff0c;更是因为他远超常人的职业精神。 其实做到这一点&#xff0c;并不难&#xff0c;难的是坚持。坚持那么早时间起床&#xff0c;坚持十年如一…

小程序沉浸式_古北水镇红叶祭嵌入戏精学院 全新文旅沉浸模式让游客嗨起来...

2020年10月17日-24日&#xff0c;古北水镇第二届红叶祭火热来袭。今年除了“超级漫展二次元度假”的模式&#xff0c;古北水镇与顶级沉浸互动体验运营方——INX戏精学院合作&#xff0c;在深度体验空间的同时&#xff0c;加入了互动式的实景游戏体验&#xff0c;通过演员互动&a…

又拍云刘平阳,理性竞争下的技术品牌提升之道

云服务市场趋渐平稳&#xff0c;在这种情况下&#xff0c;就需要通过对某一项技术的深入应用来实现服务的精致化。同时&#xff0c;对品牌的打造和包装也必不可少。\\又拍云在2010年开始提供云服务&#xff0c;经过多年的发展&#xff0c;以及市场策略的转变&#xff0c;决定对…

编写代码的工作在哪找_编写事件代码如何帮助我获得了出色的工作

编写代码的工作在哪找Everyone kept telling me about the importance of networking, but it was always something I blew off. I’m pretty quiet and introverted, particularly when meeting strangers. I thought I just wasn’t built for networking.每个人都在不断告诉…

int x = 0x13 c语言,2004年7月全国高等教育自学考试微型计算机原理与接口技术试题...

课程代码&#xff1a;02205第一部分 C语言程序设计一、单项选择题(在每小题的四个备选答案中&#xff0c;选出一个正确答案&#xff0c;并将正确答案的序号填在题干的括号内。每小题2分&#xff0c;共10分)1.4位无符号二进制数表示的数的范围是( )。A.0&#xff5e;9999 B.…

iOS开发简单高效的数据存储

在iOS开发过程中&#xff0c;不管是做什么应用&#xff0c;都会碰到数据保存的问题&#xff0c;你是用什么方法来持久保存数据的&#xff1f;这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题&#xff0c;而且大家对这个问题的热情持续高涨。本文主要从概念上把“数据…

Oracle中Date和Timestamp的区别

Date和Timestamp精度不一样&#xff1a; 01&#xff09;Timestamp精确到了秒的小数点&#xff08;如&#xff1a;2018-11-13 16:40:03.698&#xff09;&#xff1b; 02&#xff09;Date只精确到整数的秒&#xff08;如&#xff1a;2018-11-13 16:40:03&#xff09; 转载于:http…

table偏见和HTML仇外心理

by Anthony Ng由Anthony Ng <table>偏见和HTML仇外心理 (<table> prejudice and HTML xenophobia) I was looking over some HTML with a student the other day when we stumbled onto a <table>.前几天&#xff0c;当我偶然发现一个<table>时&#…

回滚机制_【巨杉数据库SequoiaDB】巨杉 Tech | 并发性与锁机制解析与实践

01概述数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时&#xff0c;在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据&#xff0c;破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。…

Android系统源码学习——源码目录结构介绍

2019独角兽企业重金招聘Python工程师标准>>> Android 4.0源码目录结构: 本文介绍Android源码目录结构&#xff0c;以便读者理清Android编译系统核心代码在Android源代码的位置。 Android源码体积非常庞大&#xff0c;由Dalvik虚拟机、Linux内核、编译系统、框架代码…

简答题c语言文件操作顺序,计算机基础与程序设计2012年4月真题试题(02275)

计算机基础与程序设计2012年4月真题试题与答案解析(02275)计算机基础与程序设计2012年4月真题试题与答案解析(02275)&#xff0c;本试卷总共100分。一、单项选择题(本大题共20小题.每小题1分&#xff0c;共20分)在每小题列出的四个备选项中只有一个是符合题目要求的&#xff0c…

汇编实验3

1.运行如下代码&#xff1a; assume cs:codecode segment mov ah,2 mov dl,3 add dl,30h int 21h mov ah,2 mov dl,6 add dl,30h int 21h mov ah,4ch int 21hcode endsend 进行汇编运行之后结果为&#xff1a; 将第四行和第九行的寄存器dl的值修改之后代码如下&#xff1a; a…

听了一堂《**学院》的课,我也是醉了

这还是首席讲师的ppt&#xff0c;这说话咋感觉&#xff0c;不像是技术出身&#xff0c;反倒是MongoDB的销售人员呢。 这说话&#xff0c;不大讲相对&#xff0c;净他妈的 绝对&#xff0c;这水平&#xff0c;我真醉了。 这牛逼吹得&#xff0c;啧啧啧。 我还是看书吧。 转载于:…

react 组件引用组件_React Elements VS React组件

react 组件引用组件A few months ago I posted to Twitter what I thought was a simple question:几个月前&#xff0c;我在Twitter上发布了一个我认为简单的问题&#xff1a; What surprised me wasn’t the joint confusion around this question, but rather the amount o…

appium 环境搭建(不推荐安装此版本appium,推荐安装appium desktop)

一&#xff1a;安装node.js 1、双击这个软件 2、一键安装&#xff0c;全都下一步&#xff0c;不要私自更改安装路径 3、打开cmd&#xff0c;输入npm&#xff0c;出现如下截图表示成功 二&#xff1a;安装appium 1、双击appium-installer.exe 2、一键安装&#xff0c;全都下一步…

二级c语言上机题库及解析,2013年计算机二级C语言上机题库及答案解析(3)

填空题给定程序中&#xff0c;函数fun的功能是:在形参ss所指字符串数组中&#xff0c;查找含有形参substr所指子串的所有字符串并输出&#xff0c;若没找到则输出相应信息。ss所指字符串数组中共有N个字符串&#xff0c;且串长小于M。程序中库函数strstr(s1, s2)的功能是在 s1串…

js 数组遍历符合条件跳出循环体_C++模拟面试:从数组“紧凑”操作说开来

面试官自来也去掉一个字符串中的空格。假设用C语言来解答&#xff0c;字符串是char数组。O(n)时间复杂度实现不难&#xff0c;比如额外申请一个新数组&#xff0c;然后遍历一遍字符串&#xff0c;将符合条件的字符存储到新数组中&#xff0c;实现起来很简单。但这显然不能让面试…

项目NABCD的分析

N&#xff1a;你的创意解决了用户的什么需求 本项目解决了在校大学生和社会工程人士在计算一些工程测量中的需求&#xff0c; 可以通过自己提供的一些测得的已知数据来推算出自己想要的数据结果&#xff0c; 比用户自己手动计算更有效更快更节省时间 A&#xff1a;有什么招数来…

git 命令git 地址_这是我上周使用的所有Git命令及其作用。

git 命令git 地址by Sam Corcos由Sam Corcos 这是我上周使用的所有Git命令及其作用。 (Here are all the Git commands I used last week, and what they do.) Like most newbies, I started out searching StackOverflow for Git commands, then copy-pasting answers, witho…