z
z.cpp/in/out
题目描述
在数轴上有一个线段,左端点在 0,长度为 l。
现在需要按顺序完成 n 个任务,第 i 个任务可以用 xi 表示:当线段接触到点 xi 时,视为完成任务,也就是 xi 在线段某一端点上、或两端点之间。
你可以任意平移线段,求依次完成任务所需要的最短的平移总距离。
q 次询问,每次给出一个 l。
输入格式
从文件 z.in 中读入数据。
第一行,两个自然数 n,q。
第二行,n 个整数代表 xi。
第三行,q 个自然数,代表询问的 l。
输出格式
输出到文件 z.out 中。
输出 q 行,每行一个整数,代表对应询问的答案。
样例 1 输入
文本
9 6
2 -3 -1 1 2 3 5 3 7
0 1 2 3 4 5
样例 1 输出
样例 1 解释
当 l=3 时:
- 一开始在 [0,3],完成任务 1。
- 移动到 [−3,0],完成任务 2, 3。
- 移动到 [0,3],完成任务 4, 5, 6。
- 移动到 [2,5],完成任务 7, 8。
- 移动到 [4,7],完成任务 9。
ans=3+3+2+2=10。
样例 2 输入
文本
8 8
5 0 5 15 0 -10 0 -20
20 15 14 11 10 5 1 0
样例 2 输出
文本
20
20
22
28
30
50
74
80
数据范围
保证 n,q∈[0,105],xi∈[−109,109],l∈[0,109]。
| Subtask |
分值 |
n≤ |
q≤ |
其他限制 |
| 1 |
30 |
103 |
103 |
无 |
| 2 |
1 |
|
0 |
无 |
| 3 |
14 |
105 |
|
保证 {xi} 严格单调 |
| 4 |
20 |
105 |
|
$\forall i \in [1, n),\ |
| 5 |
20 |
|
105 |
∀i∈[1,n], xi≥0 |
| 6 |
15 |
|
|
无 |