16. Откат изменения значения

☰ Теория

Стек Stack<T>

Что хранит. Хранит элементы как стопку. Первым извлекается последний добавленный элемент: LIFO.

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

Основные операции

Запись на C#Назначение
s.Push(x)Положить x на вершину.
s.Pop()Вернуть и удалить верхний элемент.
s.Peek()Прочитать вершину без удаления.
s.CountЧисло элементов.
s.Clear()Удалить все элементы.
s.ToArray()Получить массив от вершины к основанию стека.

Пример

Для примера нужны using System; и using System.Collections.Generic;. Код выполняется внутри Main.

Stack<int> history = new Stack<int>();
history.Push(10);
history.Push(20);
Console.WriteLine(history.Peek());
Console.WriteLine(history.Pop());
Console.WriteLine(history.Peek());

Вывод:

20
20
10

Важно. Перед Peek и Pop проверьте Count > 0. Для отмены сохраняют данные предыдущего состояния. Обычный перебор стека идёт от последнего добавленного элемента к первому.

Для этой задачи

  • Отмена. Перед новым присваиванием сохраните прежнее значение через Push.

В редакторе есть числовое поле с начальным значением x. Каждая команда SET сохраняет прежнее значение в историю и устанавливает новое. UNDO восстанавливает последнее сохранённое значение и удаляет соответствующую запись истории. Если история пуста, значение не меняется. GET только читает текущее значение. Даже SET с тем же значением создаёт запись истории.

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

Первая строка содержит q и начальное значение x. Далее идут q команд: SET value, UNDO или GET.

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

После каждой команды выведите текущее значение поля.

Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.

Ограничения

1 ≤ q ≤ 100000; начальное значение и все value — целые числа от −10⁹ до 10⁹.

Примеры
Входные данныеВыходные данные
1
7 10
SET 20
SET 30
UNDO
GET
UNDO
UNDO
GET
20
30
20
20
10
10
10
2
6 5
SET 7
SET 7
UNDO
SET 9
UNDO
UNDO
7
7
7
9
7
5

Напишите программу
Auto
       

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

Статистика успешных решений по компиляторам