printРабочее место участника

printЗадачи

1328. Серийные номера

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Фирма хранит упорядоченную таблицу серийных номеров в виде списка диапазонов серийных номеров, в которой записаны также две соответствующих части информации – так называемый статусный код и трансферный код. Этот список диапазонов, в свою очередь, представляет собой таблицу из 4-х колонок: начальный серийный номер, конечный серийный номер, статусный код и трансферный код. Серийные номера, как и трансферные коды, представляют собой числа от 1 до `2^31\ -\ 1` включительно, а статусный код всегда является одной заглавной латинской буквой. Таблица диапазонов хранится строго в порядке возрастания серийных номеров, диапазоны номеров никогда не перекрываются, и, для каждого серийного номера, таблица должна всегда предоставлять самую последнюю информацию (статусный код и трансферный код) для этого серийного номера.
Рассмотрим пример. Пусть были созданы 100 000 серийных номеров со статусом "A" и трансферным кодом 1. Запись в таблице диапазонов в таком случае будет выглядеть так:
1 100000 A 1
Понятно, что такая запись гораздо более эффективна, чем хранение 100 000 отдельных строк в таблице. Единственная проблема – произведение изменений в таблице более сложно, чем если бы мы хранили отдельные строки. К примеру, если серийный номер 12345 должен поменять статус на "B", то вместо одной записи у нас будет уже три:
1 12344 A 1
12345 12345 B 1
12346 100000 A 1
Теперь, изменим трансферный код для всех серийных номеров в диапазоне от 12000 до 12999 на 2. Получим такую таблицу:
1 11999 A 1
12000 12344 A 2
12345 12345 B 2
12346 12999 A 2
13000 100000 A 1
Теперь, сменим для всех серийные номеров от 10000 до 100000 статус на "C" и трансферный код на 2:
1 9999 A 1
10000 100000 C 2
Однажды созданный серийный номер никогда не должен удаляться, но допустимо иметь диапазоны неопределенных серийных номеров, между диапазонами определенных. К примеру, давайте изменим все серийные номера с 1000000 до 1999999 на статус "Z" и трансферный код 99:
1 9999 A 1
10000 100000 C 2
1000000 1999999 Z 99
И наконец, таблица всегда должна содержать минимальное количество строк. Например, рассмотрим следующую таблицу:
1 10 A 1
11 20 A 1
21 30 B 1
Первые две строки можно объединить, поэтому эта таблица может быть заменена на следующую:
1 20 A 1
21 30 B 1
Следующая таблица, наоборот, уже содержит минимальное число строк, потому что в первой и второй строке различаются трансферные коды:
1 10 A 1
11 20 A 2
21 30 B 1
И наконец, следующая таблица также не может быть сокращена, потому что между первой и второй строкой есть неопределенный элемент:
1 10 A 1
12 20 A 1
21 30 B 1
Ваша задача – по заданному списку запросов вывести результирующую минимальную таблицу серийных номеров. Запросы применяются к таблице последовательно. Изначально все серийные номера в таблице не определены.
В первой строке входного файла содержится одно целое число `N` (`1\ ≤\ N\ ≤\ 100\ 000`) – количество запросов на изменение таблицы серийных номеров. В следующих `N` строках содержатся запросы на изменение, по одному на строку, в формате, описанном выше.
Необходимо вывести несколько строк – результирующую минимальную таблицу серийных номеров в формате, описанном выше.

Пример ввода 1

2
1 100000 A 1
12345 12345 B 1

Пример вывода 1

1 12344 A 1
12345 12345 B 1
12346 100000 A 1

Пример ввода 2

4
1 100000 A 1
12345 12345 B 1
12000 12999 A 2
12345 12345 B 2

Пример вывода 2

1 11999 A 1
12000 12344 A 2
12345 12345 B 2
12346 12999 A 2
13000 100000 A 1

Пример ввода 3

5
1 100000 A 1
12345 12345 B 1
12000 12999 A 2
12345 12345 B 2
10000 100000 C 2

Пример вывода 3

1 9999 A 1
10000 100000 C 2

Пример ввода 4

6
1 100000 A 1
12345 12345 B 1
12000 12999 A 2
12345 12345 B 2
10000 100000 C 2
1000000 1999999 Z 99

Пример вывода 4

1 9999 A 1
10000 100000 C 2
1000000 1999999 Z 99
loading