10. Лифт

Не решаласьСложная

Компания ElevatorCorp, в которой работает папа Васи, когда не ведет факультатив по математике, решила улучшить качество своих лифтов. Аналитическому отделу поручили выяснить, сколько времени проводит в движении лифт. В протоколе логирования все события вызова лифта имеют формат: timestamp start_floor destination_floor, где timestamp - количество секунд от начала рассчитываемого периода, start_floor destination_floor - этаж вызова лифта и этаж, на который едет пассажир.

Правила работы лифта аналитик Анна нашла в документации:

  • в начальный момент времени (0) лифт стоит на первом этаже;

  • если пассажир вызывает лифт, когда тот свободен, то лифт сразу же начинает двигаться к тому, кто его вызвал;

  • если лифт едет с пассажиром и проезжает мимо другого пассажира, направление которого совпадает с направлением движения лифта, лифт остановится и заберет этого пассажира, после чего продолжит движение. Когда все люди выйдут на своих этажах, обработка событий продолжится в порядке поступления событий. Если событий в очереди нет, то лифт остается на этаже;

  • если на этаже из лифта вышли все пассажиры, но здесь же ожидают другие пассажиры в направлении текущего движения, то они заходят в лифт, и он продолжает движение с сохранением направления;

  • все люди соблюдают правила пользования лифтом, и если лифт едет вверх, а им необходимо вниз, они не зайдут в него;

  • лифт может вместить любое количество людей;

  • пассажиры входят и выходят мгновенно.

Добавим отдельно, пока пустой лифт едет к пассажиру, он не останавливается на промежуточных этажах. Если в какой-то момент времени одновременно происходит вызов на этаже, возле которого лифт стоит либо проезжает, то сначала обрабатывается действие человека, а затем в этот же момент - текущее множество вызовов. Таким образом, в этот момент времени лифт может сразу открыться, если стоял на этаже, мгновенно остановиться и открыть двери, если направления движения лифта и пассажира совпадают, проехать мимо, если лифт движется пустым или направления движения пассажира и лифта не совпадают.

Для проведения экспериментов с новыми версиями программного обеспечения нужно реализовать алгоритм быстрой симуляции обработки большого числа вызовов лифта. Для каждого пассажира необходимо определить, через какое количество секунд после вызова он зайдет в лифт.

Формат ввода

В первой строке содержатся числа nn и tt (1n31051 \le n \le 3\cdot10^5, 1t10001 \le t \le 1000) - количество пассажиров и время в секундах, за которое лифт перемещается между этажами.

Далее следует описание вызовов лифта. В ii-й из следующих nn строк содержится по 3 числа tit_i, sis_i, did_i (1ti,si,di1091 \le t_i, s_i, d_i \le 10^9, sidis_i \ne d_i) - время вызова, стартовый этаж и этаж, на который едет человек, соответственно.

Гарантируется, что все tit_i различны и записаны в логе в порядке возрастания.

Формат вывода

Для всех пассажиров в порядке их следования во входных данных выведите по одному числу в строке - времени ожидания лифта на этаже в секундах.

Ограничения

Ограничение времени

6 с

Ограничение памяти

512 МБ

Пример 1

Ввод
5 10
5 5 1
10 2 3
15 3 1
20 4 5
25 3 2
Вывод
40
85
50
95
40

Пример 2

Ввод
5 10
1 1 4
101 1 4
202 1 4
300 4 1
301 4 1
Вывод
0
30
30
0
59

Пример 3

Ввод
2 10
1 5 6
2 2 3
Вывод
40
89

Пример 4

Ввод
6 1
1 1 4
2 2 4
3 3 4
7 4 2
8 1 2
9 2 1
Вывод
0
0
0
0
2
0

Теги

Нужно войти, чтобы отправить решение.Войти