首先为了保证发车时间都不同,T[i]=max(T[i],T[i-1]+1)

然后设f[i]表示前i列车回来的最早时刻

f[i]=min(max(T[i],f[j]+i-j-1)+s*2+i-j-1)

=min(max(-j+T[i],f[j]-2*j+i-1))+s*2+i-1

=min(

min(-j)+T[i],f[j]-j<=T[i]-i+1

min(f[j]-2*j)+i-1,f[j]-j>=T[i]-i+1

)+s*2+i-1

用Treap维护区间最小值即可

#include<cstdio>
typedef long long ll;
int n,s,i,t[1000010],seed;ll f,inf=1LL<<60;
inline void read(int&a){char ch;while(!(((ch=getchar())>='0')&&(ch<='9')));a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}
inline void max(int&x,int y){if(x<y)x=y;}
inline void up(ll&x,ll y){if(x>y)x=y;}
inline ll min(ll x,ll y){return x<y?x:y;}
inline int rand(){return seed=seed*233+17;}
struct node{
int p;ll val,v1,minv1,v2,minv2;node*l,*r;
node(){val=p=0,v1=minv1=v2=minv2=inf;l=r=NULL;}
inline void up(){minv1=min(v1,min(l->minv1,r->minv1));minv2=min(v2,min(l->minv2,r->minv2));}
}*blank=new(node),*T;
inline void Rotatel(node*&x){node*y=x->r;x->r=y->l;x->up();y->l=x;y->up();x=y;}
inline void Rotater(node*&x){node*y=x->l;x->l=y->r;x->up();y->r=x;y->up();x=y;}
void Ins(node*&x,ll p,ll v1,ll v2){
if(x==blank){
x=new(node);x->val=p;x->l=x->r=blank;x->v1=x->minv1=v1;x->v2=x->minv2=v2;x->p=rand();
return;
}
up(x->minv1,v1);up(x->minv2,v2);
if(p==x->val){up(x->v1,v1);up(x->v2,v2);return;}
if(p<x->val){
Ins(x->l,p,v1,v2);
if(x->l->p>x->p)Rotater(x);
}else{
Ins(x->r,p,v1,v2);
if(x->r->p>x->p)Rotatel(x);
}
}
ll Ask1(node*&x,ll p){
if(x==blank)return inf;
if(p==x->val)return min(x->v1,x->l->minv1);
if(p>x->val)return min(x->v1,min(x->l->minv1,Ask1(x->r,p)));
return Ask1(x->l,p);
}
ll Ask2(node*&x,ll p){
if(x==blank)return inf;
if(p==x->val)return min(x->v2,x->r->minv2);
if(p<x->val)return min(x->v2,min(x->r->minv2,Ask2(x->l,p)));
return Ask2(x->r,p);
}
int main(){
blank->l=blank->r=blank;
read(n),read(s);s=s*2-1;
for(t[0]=-1,i=1;i<=n;i++)read(t[i]),max(t[i],t[i-1]+1);
for(Ins(T=blank,0,0,0),i=1;i<=n;i++)f=min(Ask1(T,t[i]-i+1)+t[i],Ask2(T,t[i]-i+1)+i-1)+s+i,Ins(T,f-i,-i,f-i*2);
return printf("%lld",f),0;
}

  

BZOJ3830 : [Poi2014]Freight的更多相关文章

  1. [POI2014]Freight

    题目大意: 有两个城镇$A$和$B$,有$n(n\le10^6)$辆车从$A$地出发前往$B$再返回$A$地.两地之间的行驶时间为$s(s\le10^9)$,每辆车从$A$地出发的最早时间是$t_i( ...

  2. bzoj 3830: [Poi2014]Freight【dp】

    参考:https://blog.csdn.net/zqh_wz/article/details/52953516 妙啊 看成分段问题,因为火车只能一批一批的走(易证= =)设f[i]为到i为止的车都走 ...

  3. POI2014题解

    POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和 ...

  4. Work at DP

    转载请注明出处:http://www.cnblogs.com/TSHugh/p/8858805.html Prepared: (无notes的波兰题目的notes见我的波兰题目补全计划)BZOJ #3 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. BZOJ 3524: [Poi2014]Couriers [主席树]

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1892  Solved: 683[Submit][St ...

  7. BZOJ 3524: [Poi2014]Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1905  Solved: 691[Submit][St ...

  8. [BZOJ3872][Poi2014]Ant colony

    [BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

  9. Simulating a Freight robot in Gazebo

    Installation Before installing the simulation environment, make sure your desktop is setup with a st ...

随机推荐

  1. Ubuntu 下 LAMP 的配置文件路径 转:

      配置文件路径: 1>apache 的配置文件路径 /etc/apache2/apache2.conf 2>apache 网站字符编码配置路径 /etc/apache2/conf.d/c ...

  2. c++字符串详解(转)

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是 ...

  3. 基于网页内容数据采集 PHP开发学习笔记

    jQuery数字的截取: str.toFixed(num);//小数的截取 toFixed() <script type="text/javascript">  var ...

  4. python-twisted系列(1)

    前言: 这不是一个入门教程.而是知识点的梳理. 开胃图: 这是一个TCP server的“交互图”. reactor 它是Twisted事件处理的核心.包括一些处理网络通讯,线程和事件分派的接口. 一 ...

  5. tcp/IP点对点通信程序

    点对点的通信 服务器端与客户端在建立连接之后创建一个进程 服务器端: 子进程用于接收主机的输入并将数据发送出去.父进程用于接收客户端的数据并输出到主机. 子进程一直等待主机的输入,输入的数据放在发送缓 ...

  6. C++公有继承

    is-a.has-a和like-a.组合.聚合和继承 两组概念的区别 - cbk861110的专栏 - 博客频道 -CSDN.NET http://blog.csdn.net/cbk861110/ar ...

  7. WriteFile实现下载

    TransmitFile实现下载     protected void Button1_Click(object sender, EventArgs e)      {         /*      ...

  8. iOS 一个工程中引用其他工程时要注意Skip Install选项

    当主工程引用其他工程,以便使用他们生成的库的时候,在发布时,主要注意这个选项.这个选项的说明如下 Activating this setting when deployment locations a ...

  9. svn 切换默认用户名

    2015年1月19日 15:37:30\ 原文: http://www.2cto.com/os/201307/229325.html linux svn切换用户   1. 临时切换   在所有命令下强 ...

  10. block引发的陷阱

    block在项目的开发中使用时非常频繁的,苹果官方也极力推荐使用block.其实,究其本质,block就是指向结构体的指针(可利用运行时机制查看底层生成的c代码).然而在使用block时会存在很多陷阱 ...