首先为了保证发车时间都不同,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. grep与egrep

    当只有一个匹配条件时:egrep pattern file等价于grep -E pattern file 例如: 当多个匹配条件时,只能用egrep -e pattern1 -e pattern2 - ...

  2. Maximum Gap

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  3. selenium启动Chrome时,加载用户配置文件

    selenium启动Chrome时,加载用户配置文件   Selenium操作浏览器是不加载任何配置的,网上找了半天,关于Firefox加载配置的多点,Chrome资料很少,下面是关于加载Chrome ...

  4. iOS 中添加lib型target库的依赖问题

    今天在编码时遇到一个问题,总提示我找不到系统库文件. 我的项目结构类似下图 在TestLib中有引用CoreLocation库的类.但是CoreLocation库需要加在PhotoInfoDemo对象 ...

  5. iOS7 和 iOS6的页面兼容问题

    ios7 的status bar变透明了,各个bar也透明了,一个controller的view占据了整个屏幕.怎么调整呢?基本的思想是把内容的坐标下移.如果仅仅把内容的y坐标下移,那么在ios6上显 ...

  6. July 27th, Week 31st Wednesday, 2016

    Don't let yesterday take up too much of today. 别让昨天的事情占据今天太多时间. Learn from yesterday, but don't let ...

  7. 线段覆盖4(codevs 3012)

    题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...

  8. (转)Android中的Shape使用总结

    http://blog.csdn.net/bear_huangzhen/article/details/24488337 在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的 ...

  9. .pro配置选项

    在Qt Creator的项目中添加头文件和库   在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库 unix:LIBS += -L your_lib_path -ly ...

  10. zsh(yum装包的时候,有时候会不行)

    [root@GIT ~]# yum search zsh =============================== N/S Matched: zsh ====================== ...