ARC073D Many Moves

题意:在一行中有 个格子,编号为

颗棋子,初始时分别位于位置

按顺序给出 个要求:

  • 给出位置 ,要求将两个棋子中任意一个移动到位置

就是说将棋子从 位置移动到 位置需要花费 秒。允许两棋子在同一个位置上。

问满足所有要求所需的最小时间。

,时限


考虑 ,记 为:在处理完前 个要求后,两个棋子的位置分别为 ,所需的最小时间。

可以发现,当处理完第 个要求时,必定有一个棋子在 处,故状态可以简化为: 表示在处理完前 个要求后,一个棋子在 处,另一个在 处,所需的最小时间。

转移如下:

只需维护 也容易写进一次函数)的区间 即可处理第二种转移。

第一种转移不便维护,记 ,改为记录

这样,第一种转移对 是没有影响的。

第二种转移中额外减去 即可。

使用(两颗)线段树维护,复杂度