Задача №1698. Гомо или гетеро? Максимальное время работы на одном тесте:
3 секунды
Максимальный объем используемой памяти:
256 мегабайт
Определим две операции над списком целых чисел:
insert number – добавляет заданное число в конец списка
delete number – удаляет первое вхождение заданного числа из списка. Если список не содержит заданного числа, то ничего не меняется.
Например, результатом добавления числа 4 в список [1, 2, 1] будет список [1, 2, 1, 4]. Если мы удалим число 1 из этого списка, то получим список [2, 1, 4], но если мы попытаемся удалить число 3 из списка [1, 2, 1, 4], то список останется неизменным.
Список называется гомогенным, если он содержит хоты бы два одинаковых числа и гетерогенным, если содержит хотя бы два различных числа. Например, список [2, 2] является гомогенным, список [2, 1, 4] – гетерогенным, список [1, 2, 1, 4] – одновременно и тем и другим, а пустой список не является ни гомогенным, ни гетерогенным.
Напишите программу, которая по последовательности операций добавления и удаления в пустой список, определяет после каждой из операций, является ли список гомогенным или гетерогенным.
Формат входных данных
Первая строка содержит целое число n – количество операций (1 ≤ n ≤ 100 000).
Следующие n строк содержат описания операций. Каждая операция описывается словом "insert" или "delete" и числом k – аргументом операции (-109 ≤ k ≤ 109).
Формат выходных данных
Для каждой операции выведите строку, содержащую единственное слово, описывающее состояние списка после этой операции:
"both" - если список одновременно является и тем и другим
"hetero" - если список является гетерогенным
"homo" - если список является гомогенным
"neither" - если список не принадлежит ни одному типу.
handsfree = false;
var
a: array[1..100] of integer;
i, n: integer;
begin
{ввод массива}
if handsfree then
n := random(20) + 5
else begin
write('n = ');
readln(n);
end;
writeln('Данные массива:');
for i := 1 to n do
begin
if handsfree then begin
a[i] := random(100) - 50;
write(a[i], ' ');
end
else readln(a[i]);
end;
writeln();
{изменение элементов}
writeln('Вывод прямой:');
for i := 1 to n do
write(a[i], ' ');
writeln();
{изменение элементов}
writeln('Вывод обратный:');
for i := n downto 1 do
write(a[i], ' ');
end.