Delivery Club
Contest: Codeforces Round 441 (Div. 1, by Moscow Team Olympiad)
Difficulty rating: 2600
Tags: binary search, data structures, dp

Petya and Vasya got employed as couriers. During the working day they are to deliver packages to n different points on the line. According to the company's internal rules, the delivery of packages must be carried out strictly in a certain order. Initially, Petya is at the point with the coordinate s1, Vasya is at the point with the coordinate s2, and the clients are at the points x1, x2, ..., xn in the order of the required visit.

The guys agree in advance who of them will deliver the package to which of the customers, and then they act as follows. When the package for the i-th client is delivered, the one who delivers the package to the (i + 1)-st client is sent to the path (it can be the same person who went to the point xi, or the other). The friend who is not busy in delivering the current package, is standing still.

To communicate with each other, the guys have got walkie-talkies. The walkie-talkies work rather poorly at great distances, so Petya and Vasya want to distribute the orders so that the maximum distance between them during the day is as low as possible. Help Petya and Vasya to minimize the maximum distance between them, observing all delivery rules.

Input format:
The first line contains three integers n, s1, s2 (1 ≤ n ≤ 100 000, 0 ≤ s1, s2 ≤ 109) — number of points of delivery and starting positions of Petya and Vasya.

The second line contains n integers x1, x2, ..., xn — customers coordinates (0 ≤ xi ≤ 109), in the order to make a delivery.

It is guaranteed, that among the numbers s1, s2, x1, ..., xn there are no two equal.

Output format:
Output the only integer, minimum possible maximal distance between couriers during delivery.

Constraints:
Time limit: 2.0 s
Memory limit: 512.0 MB

Note:
In the first test case the initial distance between the couriers is 10. This value will be the answer, for example, Petya can perform both deliveries, and Vasya will remain at the starting point.

In the second test case you can optimally act, for example, like this: Vasya delivers the package to the first customer, Petya to the second and, finally, Vasya delivers the package to the third client. With this order of delivery, the distance between the couriers will never exceed 1.

In the third test case only two variants are possible: if the delivery of a single package is carried out by Petya, the maximum distance between them will be 5 - 2 = 3. If Vasya will deliver the package, the maximum distance is 4 - 2 = 2. The latter method is optimal.

Example input:
2 0 10
5 6

Example output:
10

Example input:
3 2 1
3 4 5

Example output:
1

Editorial:
We will learn to check that the answer is no more p. If we learn to do this, we can make a binary search for the answer and get the answer.
To check we calculate dpi — is it possible to process the first i orders so that the last order of one courier is i, and the second order is i + 1. In this case, the transition can be done immediately by several steps forward.
Transition from i to j means that the first courier will execute the orders i + 1, i + 2, ... j - 1, and the second — the order with the number j.
The transition can be made if |xj - x{j - 1}| ≤ p and |xk - x{i - 1}| ≤ p for all k from i to j - 1.
It may be rewritten as xi - 1 - p ≤ xk ≤ xi - 1 + p, and so the maximum j for given i can be found using segment tree or analogical structure.
After that you only set dpj = 1 to all possible j on the segment. It can be done for example going along the massive and knowing maximum segment of possible j.
The solution works in O(nlognlogANS).