Олимпиадный тренинг

Задача . Package Pickup


Задача

Темы:

**Замечание: время на тест в этой задаче 4 сек, в два раза больше, чем по умолчанию.**

Фермер Джон распределил коров и пакеты по странной схеме на числовой оси, используя следующий процесс:

  • ФД выбрал число \(M\) (\(1 \le M \le 10^{18}\)).
  • ФД выбрал \(N\) (\(1 \le N \le 2 \cdot 10^4)\) интервалов \([L_i, R_i]\) чтобы распределить коров (\(1 \le L_i \le R_i \le 10^{18}\)). Затем он разместил коров в позициях \(L_i, L_i + M, L_i + 2M, \ldots, R_i\). Гарантируется, что \(R_i - L_i\) кратно \(M\).
  • ФД выбирает \(P\) (\(1 \le P \le 2 \cdot 10^4)\) интервалов \([A_i, B_i]\) чтоб распределить пакеты (\(1 \le A_i \le B_i \le 10^{18}\)). Затем он размещает пакеты в позициях \(A_i, A_i + M, A_i + 2M, \ldots, B_i\). Гарантируется, что \(B_i - A_i\) кратно \(M\).
Поле распределения коров и пакетов, ФД хочет увидеть сколько времени требуется коровам, чтобы забрать пакеты. Каждую секунду ФД может дать команду одной корове двинуться на одну единицу влево или вправо от текущей позиции. Если корова попадает в позицию, где размещён пакет, она его забирает. ФД хочет узнать минимальное количество секунд, которое потребуется коровам чтобы собрать все пакеты.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(M\), \(N\), \(P\).

Каждая из последующих \(N\) строк содержит два целых числа \(L_i\) и \(R_i\).

Каждая из последующих \(P\) строк содержит два целых числа \(A_i\) и \(B_i\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите одно целое число, представляющее минимальное количество времени, которое потребуется коровам, собрать все пакеты, если в каждую секунду он может передвинуть одну любую корову влево или вправо на единицу.


Примеры
Входные данныеВыходные данные
1 100 3 7
10 10
20 20
30 30
7 7
11 11
13 13
17 17
24 24
26 26
33 33
22

time 500 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя