挺水的一道线段树+DP题。可以从底往上添加线段,每添加线段之前查询端点所被覆盖的区间线段。再从最顶往下DP,每次从端点出发,递推覆盖该端点的区间线段的两端的值即可。

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <cctype>
#include <algorithm>
#define LL __int64
using namespace std; const int N= ;
const int SN=;
const int inf=(<<);
int mark[N*];
int n,s;
int dp[SN][];
struct Seg{
int l,r;
int li,ri;
}seg[SN]; void PushDown(int rt){
if(mark[rt]!=-){
mark[rt<<]=mark[rt<<|]=mark[rt];
mark[rt]=-;
}
} void update(int rt,int L,int R,int l,int r,int d){
if(L<=l&&r<=R){
mark[rt]=d;
return ;
}
PushDown(rt);
int m=(l+r)>>;
if(L<=m)update(rt<<,L,R,l,m,d);
if(m<R)update(rt<<|,L,R,m+,r,d);
} int query(int rt,int index,int l,int r){
if(mark[rt]!=-){
return mark[rt];
}
int m=(l+r)>>;
if(index<=m) return query(rt<<,index,l,m);
else return query(rt<<|,index,m+,r);
} int main(){
while(scanf("%d%d",&n,&s)!=EOF){
int mm=N,mc=-N;
memset(mark,-,sizeof(mark));
for(int i=n-;i>=;i--){
scanf("%d%d",&seg[i].l,&seg[i].r);
mm=min(seg[i].l,mm);
mc=max(seg[i].r,mc);
dp[i][]=dp[i][]=inf;
}
seg[n].l=mm; seg[n].r=mc;
mm=abs(mm);
dp[n][]=dp[n][]=inf;
mm++;
update(,,seg[n].r+mm,,mc+mm,n);
for(int i=n-;i>=;i--){
seg[i].li=query(,seg[i].l+mm,,mc+mm);
seg[i].ri=query(,seg[i].r+mm,,mc+mm);
update(,seg[i].l+mm,seg[i].r+mm,,mm+mc,i);
}
dp[][]=abs(seg[].l-s),dp[][]=abs(seg[].r-s);
int ans=inf;
int li,ri;
for(int i=;i<n;i++){
li=seg[i].li; ri=seg[i].ri;
if(li==n){
ans=min(ans,dp[i][]+abs(seg[i].l-));
}
if(ri==n){
ans=min(ans,dp[i][]+abs(seg[i].r-));
}
dp[li][]=min(dp[li][],dp[i][]+abs(seg[li].l-seg[i].l));
dp[li][]=min(dp[li][],dp[i][]+abs(seg[li].r-seg[i].l));
dp[ri][]=min(dp[ri][],dp[i][]+abs(seg[ri].l-seg[i].r));
dp[ri][]=min(dp[ri][],dp[i][]+abs(seg[ri].r-seg[i].r));
}
printf("%d\n",ans);
}
return ;
}

POJ 2374的更多相关文章

  1. POJ 2374 Fence Obstacle Course(线段树+动态规划)

    Fence Obstacle Course Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2524   Accepted:  ...

  2. POJ 2374 线段树建图+Dijkstra

    题意: 思路: 线段树+Dijkstra(要堆优化的) 线段树要支持打标记 一个栅栏 拆成两个点 :左和右 新加一个栅栏的时候 看看左端点有没有被覆盖过 如果有的话 就分别从覆盖的那条线段的左右向当前 ...

  3. ACM数据结构相关资料整理【未完成,待补充】

    在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...

  4. 【Homework】LCA&RMQ

    我校是神校,作业竟然选自POJ,难道不知道“珍爱生命 勿刷POJ”么? 所有注明模板题的我都十分傲娇地没有打,于是只打了6道题(其实模板题以前应该打过一部分但懒得找)(不过感觉我模板还是不够溜要找个时 ...

  5. $2019$ 暑期刷题记录1:(算法竞赛DP练习)

    $ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...

  6. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  7. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  8. poj 动态规划题目列表及总结

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  9. poj动态规划列表

    [1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...

随机推荐

  1. jsp 常用标签的使用

    jsp中定义实体bean<jsp:useBean id="clu" class="cn.domain.CacluBean"></jsp:use ...

  2. 删除项目中的版本控制(SVN)

    使用svn进行版本控制,每个文件夹下都有.svn文件夹,有些项目在脱离svn版本控制之后,想删除项目中所有的.svn文件夹,可用下面的方法进行快速删除: 建立一个文本文件,取名为kill-svn-fo ...

  3. scws

    SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统). 这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成 ...

  4. JVM命令参数指南

    1.调整最大堆内存 -Xmx 8192m 2.调整最小堆内存-Xmx 8192m3.设置虚拟机垃圾回收机制-XX:+UseG1GC4.收集垃圾日志信息-Xloggc:/D:gc.log5.OOM异常之 ...

  5. rabbitmq普通集群搭建详细步骤

    由于工作需求,需要安装rabbitmq,学习之余,记录一下安装过程 准备基础编译环境yum install gcc glibc-devel make ncurses-devel openssl-dev ...

  6. Elasticsearch中的segment理解

    https://blog.csdn.net/smithallenyu/article/details/52789872 参照图 https://www.cnblogs.com/smile361/p/7 ...

  7. create-react-app 引入ant design 及 使用 less

    全局引入: 第一步:全局安装 create-react-app npm install create-react-app -g 第二步:安装 yarn npm install -g yarn 第三步: ...

  8. linux 新添加的硬盘格式化并挂载到目录下

    需求: 新增加一块硬盘sdb,将sdb分区,只分一个区,格式化,挂载到目录/ssd下. 1.  查看现在已有的分区状态 # df –l 图中显示,没有看到sdb硬盘 2.  查看服务器安装的硬盘状态( ...

  9. 【Oracle】客户端监听配置

    首先找到oracle软件安装的目录,找到\product\11.2.0\client_1\network\admin,打开tnsnames.ora文件: 粘贴一下内容: LISTENER= (DESC ...

  10. C#获取窗口大小和位置坐标 GetWindowRect用法

    [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetWi ...