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

Задача . D. Бананы в микроволновке


У вас есть сломанная микроволновка, в которую вы хотите положить несколько бананов. У вас есть \(n\) моментов времени, пока микроволновка не сломается окончательно. В каждый момент времени она показывает новую операцию.

Пусть \(k\) будет равно текущему количеству бананов в микроволновке. Изначально \(k = 0\). В \(i\)-й операции на вход подаются три параметра \(t_i\), \(x_i\), \(y_i\). В зависимости от значения \(t_i\) необходимо сделать одно из следующий действий:

Тип 1: (\(t_i=1\), \(x_i\), \(y_i\)) — выберите \(a_i\) такое, что \(0 \le a_i \le y_i\), и произведите следующую замену \(a_i\) раз: \(k:=\lceil (k + x_i) \rceil\).

Тип 2: (\(t_i=2\), \(x_i\), \(y_i\)) — выберите \(a_i\) такое, что \(0 \le a_i \le y_i\), и произведите следующую замену \(a_i\) раз: \(k:=\lceil (k \cdot x_i) \rceil\).

Обратите внимание, что \(x_i\) может быть дробным значением. Смотрите формат входных данных для пояснения. Также \(\lceil x \rceil\) — это наименьшее целое число \(\ge x\).

В \(i\)-й момент времени необходимо произвести \(i\)-ю операцию ровно один раз.

Для каждого \(j\) такого, что \(1 \le j \le m\), выведите самый ранний момент времени такой, что вы можете получить ровно \(j\) бананов. Если нельзя получить ровно \(j\) бананов, то выведите \(-1\).

Входные данные

В первой строке записаны два целых числа \(n\) \((1 \le n \le 200)\) и \(m\) \((2 \le m \le 10^5)\).

Затем следуют \(n\) строк, где \(i\)-я строка описывает операцию в \(i\)-й момент времени. Каждая строка содержит три целых числа \(t_i\), \(x'_i\) и \(y_i\) (\(1 \le t_i \le 2\), \(1\le y_i\le m\)).

Обратите внимание, что задается \(x'_i\), которое равно \(10^5 \cdot x_i\). Чтобы получить \(x_i\), используйте формулу \(x_i= \dfrac{x'_i} {10^5}\).

Для операций типа 1 \(1 \le x'_i \le 10^5 \cdot m\), а для операций типа 2 \(10^5 < x'_i \le 10^5 \cdot m\).

Выходные данные

Выведите \(m\) целых чисел, где \(i\)-е число равно самому раннему моменту времени, в который можно получить ровно \(i\) бананов (или \(-1\), если это невозможно).

Примечание

В первом примере мы хотим показать, как получить \(16\) бананов за три момента времени. Изначально \(k=0\).

  • В момент времени 1 мы выбираем \(a_1=2\), поэтому мы применяем обновление типа 1 — \(k := \lceil(k+3)\rceil\) — два раза. Поэтому \(k\) теперь 6.
  • В момент времени 2 мы выбираем \(a_2=0\), поэтому \(k\) не изменяется.
  • В момент времени 3 мы выбираем \(a_3=1\), поэтому мы применяем обновление типа 1 \(k:= \lceil(k+10)\rceil\) один раз. Поэтому \(k\) теперь 16.

Можно показать, что \(k=16\) нельзя получить быстрее, чем за три момента времени, используя данные операции.

Во втором примере мы хотим показать, как получить \(17\) бананов за два момента времени. Изначально \(k=0\).

  • В момент времени 1 мы выбираем \(a_1=1\), поэтому мы применяем обновление типа 1 — \(k := \lceil(k+3.99999)\rceil\) — один раз. Поэтому \(k\) теперь 4.
  • В момент времени 2 мы выбираем \(a_2=1\), поэтому мы применяем обновление типа 2 — \(k := \lceil(k\cdot 4.12345)\rceil\) — один раз. Поэтому \(k\) теперь 17.

Можно показать, что \(k=17\) нельзя получить быстрее, чем за два момента времени, используя данные операции.


Примеры
Входные данныеВыходные данные
1 3 20
1 300000 2
2 400000 2
1 1000000 3
-1 -1 1 -1 -1 1 -1 -1 -1 3 -1 2 3 -1 -1 3 -1 -1 -1 3
2 3 20
1 399999 2
2 412345 2
1 1000001 3
-1 -1 -1 1 -1 -1 -1 1 -1 -1 3 -1 -1 -1 3 -1 2 -1 3 -1

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

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