题目大意:
  有两个城镇$A$和$B$,有$n(n\le10^6)$辆车从$A$地出发前往$B$再返回$A$地。两地之间的行驶时间为$s(s\le10^9)$,每辆车从$A$地出发的最早时间是$t_i(0\le t_1\le t_2\le\ldots\le t_n\le10^9)$。行驶过程中需要保证每辆车出发时间至少相差$1$,且每个时刻运行的车都是同一个方向,问所有车都返回$A$地至少需要多少时间?

思路:
  “行驶过程中需要保证每辆车出发时间至少相差$1$”相当于令$t_i=\max(t_i,t_{i-1}+1)$。
  “每个时刻运行的车都是同一个方向”说明我们只需要对这些车分批,一批往返结束后下一批开始往返(一批车留在$B$地,另一批从$A$地过来一定存在一种等价的方案使得第一批往返完成后第二批出发)。
  有了以上两个信息,不难得到状态转移方程$f_i=\min\{\max(t_i,f_j+i-j-1)+2s+i-j-1\}$。
  由于$f_j+i-j-1$是单调递增的,所以$\max(t_i,f_j+i-j-1)$中一定可以找到一个转折点$j$使得$j$的左边取到$t_i-i$,右边取到$f_j-j-1$。左边是定值因此$j$越大越好,右边相当于求区间$[j,i)$的最小值,用树状数组维护即可,时间复杂度$O(n\log n)$。已经能AC了。
  事实上,因为$f_i$的增长速度$\ge2i$,所以取最左边即转折点的一定更优,这样就可以省掉树状数组。考虑到转折点位置是单调递增的,因此只需要每次把上一次的转折点位置记录下来,累加到当前转折点即可。时间复杂度$O(n)$。

 #include<cstdio>
#include<cctype>
#include<climits>
#include<algorithm>
typedef long long int64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=1e6+;
int t[N]={-};
int64 f[N];
int main() {
const int n=getint(),s=getint();
for(register int i=,j=;i<=n;i++) {
f[i]=LLONG_MAX;
t[i]=std::max(getint(),t[i-]+);
for(j--;j<i&&std::max((int64)t[i],f[j]+i-j-)+s*+i-j-<f[i];j++) {
f[i]=std::max((int64)t[i],f[j]+i-j-)+s*+i-j-;
}
}
printf("%lld\n",f[n]);
return ;
}

最新文章

  1. 微软消息分析器(Microsoft Message Analyzer )更新至1.2版-2015-1-20
  2. Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署
  3. sp_configure错误:不支持对系统目录进行即席更新。
  4. 2016HUAS_ACM暑假集训3F - Jungle Roads
  5. .net mvc onexception capture; redirectresult;
  6. Mongodb For Windows
  7. 机器学习实战 - 读书笔记(05) - Logistic回归
  8. Yii widget使用
  9. Google推出iOS功能性UI测试框架EarlGrey
  10. sqlserver中的rowversion
  11. Sp_Lock
  12. laytpl模板——怎么使用ajax与数据交互
  13. 【Node.js】通过mongoose得到模型,不能新添字段的问题
  14. CPU上下文切换
  15. BZOJ2821 作诗(Poetize) 主席树 bitset
  16. 【Java入门提高篇】Day29 Java容器类详解(十一)LinkedHashSet详解
  17. Qt5.7 + VS2015 环境搭建
  18. (转)Putty server refused our key的三种原因和解决方法
  19. C# 指定http请求使用Tls1.2
  20. runltp&amp;ltp-pan

热门文章

  1. [oldboy-django][2深入django]form表单clean_xx, clean完成数据验证+ form错误信息
  2. Spring 学习笔记(六)—— AOP的简单理解
  3. Android Canvas类介绍
  4. node + express + iis + iisnode + urlrewrite搭建站点
  5. 【转】Thinkphp框架的项目规划总结和踩坑经验
  6. Struts2的result返回类型
  7. 【bzoj2396】神奇的矩阵 随机化
  8. NAT64与DNS64基本原理概述
  9. Gym100286C Clock
  10. WebStorm 2017.1.2 汉化破解