У Поликарпа есть очень много работ. Каждая работа характеризуется тремя целыми числами li, ri и ti. Тройка (li, ri, ti) означает, что для выполнения работы i нужно выбрать целое число si (li ≤ si; si + ti - 1 ≤ ri), тогда работа будет выполняться непрерывно ti единиц времени, начиная с момента времени si и до момента времени si + ti - 1, включительно. Иными словами, работа выполняется в течение непрерывного отрезка времени продолжительностью ti, должна быть начата не раньше li, а закончена не позже ri.
Работы Поликарпа обладают удивительным свойством: для любых работ j, k (при j < k) lj < lk и rj < rk.
Пусть имеется упорядоченное множество работ A, содержащее |A| работ. Будем считать, что aj = (lj, rj, tj) (1 ≤ j ≤ |A|). Также будем считать, что работы упорядочены по возрастанию lj с увеличением номера.
Рассмотрим следующую рекурсивную функцию f, аргументом которой является упорядоченное множество работ A, а результатом является целое число. Функция f(A) определяется жадным алгоритмом, которые описан ниже на псевдоязыке программирования.
- Шаг 1.
, ans = 0. - Шаг 2. Рассматриваем все работы в порядке увеличения их номера в множестве A. Заведем счетчик текущей работы, i = 0.
- Шаг 3. Переходим к следующей работе: i = i + 1. Если i > |A|, то перейти к шагу 8.
- Шаг 4. Если можно выполнить работу в момент времени si = max(ans + 1, li), то выполнить работу i: si = max(ans + 1, li), ans = si + ti - 1,
. Перейти к следующей работе (шаг 3). - Шаг 5. Иначе, найти такую работу
, что, во-первых, работу ai можно выполнить в момент времени si = max
, во-вторых, значение
положительно и принимает максимальное значение среди всех bk, удовлетворяющих первому условию. Если в качестве bk можно выбрать несколько работ, выбрать ту, у которой номер в множестве A наибольший. - Шаг 6. Если удалось выбрать работу bk, то
,
. Перейти к следующей работе (шаг 3). - Шаг 7. Если не удалось выбрать работу bk, то пропустить работу i. Перейти к следующей работе (шаг 3).
- Шаг 8. Выдать ans в качестве результата работы f(A).
Поликарп запутался во всех этих формулах и определениях, поэтому он попросил вас промоделировать работу функции f, вычислите значение f(A).