挺水的一道线段树+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. E20170830-mk

    translation  n. 翻译; 译本; 转化; 转变; calculate  vt. 计算; 估计; 打算,计划; 旨在; erase  vt. 抹去; 清除; 擦掉;

  2. JS判断浏览器类型和详细区分IE各版本浏览器

    今天用到JS判断浏览器类型,于是就系统整理了一下,便于后期使用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  3. Gym - 101981A The 2018 ICPC Asia Nanjing Regional Contest A.Adrien and Austin 简单博弈

    题面 题意:一堆有n个石子,编号从1⋯N排成一列,两个人Adrien 和Austin玩游戏,每次可以取1⋯K个连续编号的石子,Adrien先手,谁不能取了则输 题解:k==1时,显然和n奇偶相关,当k ...

  4. PHP无限级分类实现(递归+非递归)

    <?php /** * Created by PhpStorm. * User: qishou * Date: 15-8-2 * Time: 上午12:00 */ //准备数组,代替从数据库中检 ...

  5. [BZOJ1041]圆上的整点

    嗯... 自己看视频讲解? >Click Here< #include<cstdio> #include<queue> #include<iostream&g ...

  6. ROS-URDF-建立模型

    前言:建立一个简单的urdf模型 详解请参看教程http://wiki.ros.org/urdf/Tutorials/Building%20a%20Visual%20Robot%20Model%20w ...

  7. 利用windbg获取dump的dll文件

    根据堆栈对应的地址查找其对应的Module ID,然后将对应的Module保存. !IP2MD 命令从托管函数中获取 MethodDesc 结构地址. !dumpmodule 1caa50 下面的命令 ...

  8. react中withRouter解决props返回为空

    利用 react + antd 框架书写导航栏时,遇到了几个坑,分别是一级菜单和二级菜单在点击的情况下,高亮没有任何问题,但是再点击浏览器返回按钮时,却就乱套了. 1. 二级菜单中,我们可以通过 pr ...

  9. Vue初级-样式

    整个网页不仅有标签还有css进行渲染,所以,现在讲讲在vue里面加入你想加的css. 在不用vue的时候,有一种内联方式加入css(大概是<div style="..."&g ...

  10. Java数据类型转换1

    1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...