#CF1922C. 最近的城市
最近的城市
C. 最近的城市
时间限制:每个测试 秒
内存限制:每个测试 MB
数轴上有 个城市,第 个城市位于坐标 处。城市的坐标按升序给出,因此 。
两个城市 和 之间的距离等于 。
对于每个城市 ,我们定义最近的城市 为满足以下条件的城市:城市 与 之间的距离不大于 与其他任何城市 之间的距离。例如,如果城市位于点 ,那么:
- 城市 的最近城市是城市 ;
- 城市 的最近城市是城市 ;
- 城市 的最近城市是城市 ;
- 城市 的最近城市是城市 ;
- 城市 的最近城市是城市 。
城市的位置满足对于每个城市,其最近的城市是唯一的。例如,城市不可能位于点 ,因为这意味着城市 有两个最近的城市( 和 ,距离均为 )。
你可以在城市之间旅行。假设你当前在城市 ,你可以执行以下两种操作之一:
- 前往任意其他城市 ,花费 枚硬币;
- 前往距离 最近的城市,花费 枚硬币。
现在给你 个询问。在每个询问中,给定两个城市,你需要计算从其中一个城市到达另一个城市所需花费的最少硬币数量。
输入
第一行包含一个整数 ()——测试用例的数量。
每个测试用例的格式如下:
- 第一行包含一个整数 ();
- 第二行包含 个整数 ();
- 第三行包含一个整数 ();
- 接下来的 行中,第 行包含两个整数 和 (;),表示在第 个询问中,你需要计算从城市 到城市 的最少硬币花费。
附加输入限制:
- 在每个测试用例中,每个城市的最近城市是唯一确定的;
- 所有测试用例的 之和不超过 ;
- 所有测试用例的 之和不超过 。
输出
对于每个询问,输出一个整数——所需花费的最少硬币数。
样例
输入
1
5
0 8 12 15 20
5
1 4
1 5
3 4
3 2
5 1
输出
3
8
1
4
14
说明
考虑样例中的前两个询问:
- 在第一个询问中,你最初在城市 。你可以先前往最近的城市(即城市 ),花费 枚硬币。然后再前往最近的城市(即城市 ),再花费 枚硬币。接着再前往最近的城市(即城市 ),再花费 枚硬币。总共花费 枚硬币从城市 到达城市 。
- 在第二个询问中,你可以用同样的方式从城市 到达城市 ,然后花费 枚硬币从城市 直接前往城市 。