#arc073d. [arc073_d]Many Moves

[arc073_d]Many Moves

题目描述

有一排NN个方格,从左到右编号为1,2,...,N1, 2, ..., N

你有两个棋子,初始时分别放在方格AABB上。你将按照接收到的顺序处理QQ个查询,每个查询有以下形式:

  • 给定整数xix_i,将其中一个棋子移动到方格xix_i上。

在这里,每移动一个棋子走过一个方格需要一秒钟。也就是说,从方格XX移动到方格YY需要XY|X-Y|秒钟。

你的目标是以最短的时间处理所有的查询。

你只能在收到查询后移动棋子,不能同时移动两个棋子。同时,不允许重新排列查询的顺序。然而,允许两个棋子同时在同一个方格上。

约束条件

  • 1N,Q200,0001 \leq N, Q \leq 200,000
  • 1A,BN1 \leq A, B \leq N
  • 1xiN1 \leq x_i \leq N

输入

从标准输入中以以下格式给出输入:

NN QQ AA BB x1x_1 x2x_2 ... xQx_Q

输出

设处理所有查询的最短时间为XX秒。请打印XX


示例输入1

8 3 1 8
3 5 1

示例输出1

7

所有查询可以在7秒内处理完成,具体操作如下:

  • 将方格11上的棋子移动到方格33
  • 将方格88上的棋子移动到方格55
  • 将方格33上的棋子移动到方格11

示例输入2

9 2 1 9
5 1

示例输出2

4

应该首先移动方格99上的棋子。


示例输入3

9 2 1 9
5 9

示例输出3

4

应该首先移动方格11上的棋子。


示例输入4

11 16 8 1
1 1 5 1 11 4 5 2 5 3 3 3 5 5 6 7

示例输出4

21