0378. Старый стек
Имя входного файла: | stack.in |
Имя выходного файла: | stack.out |
Ограничение по времени: | 2 s |
Ограничение по памяти: | 256 megabytes |
Валера нашел в своем компьютере старую программу, реализующую структуру данных под названием стек. Напомним, что эта структура может быть представлена в виде высокого стакана, в который сверху можно добавлять элементы и сверху же из стека их доставать. Таким образом, стек поддерживает две операции: добавление элемента и удаление элемента. При этом элемент, добавленный в стек последним, будет извлечен из стека первым.
Однако стек в программе Валеры оказался настолько старым, что в нем образовались дыры, в которые элементы могут самопроизвольно вываливаться. Более формально, в стеке есть N дыр, каждая из которых находится на высоте hi, а элемент в неё вываливается, если над ним находится минимум ai элементов. Все элементы вываливаются одновременно (то есть если после добавления очередного элемента несколько элементов должны вывалиться в дыру, то они вывалятся все).
Помогите Валере по описанию стека и списку операций над ним понять, сколько элементов будет безвозвратно утеряно через дыры в стеке.
Формат входного файла
Первая строка входного файла содержит два целых числа N и M(1 ≤ N ≤ 105, 1 ≤ M ≤ 3 *105) – количество дыр в стеке и количество операций, соответственно. В последующих N строках находится по два числа – 1 ≤ ai ≤ 3 *105 и 1 ≤ hi ≤ 3 *105 – описание i-той дыры в стеке. В следующей строке содержится M символов + и -. Символ + обозначает операцию добавления элемента в стек, символ - – операцию удаления.
Формат выходного файла
В выходной файл выведите единственное число – количество предметов, вывалившихся через дыры.
Пример:
stack.in | stack.out |
---|---|
2 4 1 1 2 1 +++- | 2 |
2 5 1 2 2 1 +++++ | 4 |
Рассмотрим первый пример:
- Добавление. В стеке один элемент.
- Добавление. В стеке два элемента. Один элемент вываливается в дыру на высоте 1 (поскольку над ним оказывается один элемент). Остается один элемент.
- Добавление. Так же, как и на прошлом шаге, один элемент вываливается. Остается один элемент.
- Удаление.
Рассмотрим второй пример:
- Добавление. В стеке один элемент.
- Добавление. В стеке два элемента. Элемент в дыру на высоте 1 не вываливается, поскольку над ним только один элемент, а в описании дыры указано, что требуется не менее двух.
- Добавление. В стеке три элемента. Вываливается элемент в дыру на высоте 1 (потому что над ним оказывается два элемента). И вываливается элемент в дыру на высоте 2 (потому что над ним один элемент, а вываливаются элементы одновременно). В стеке остаётся один элемент.
- Так же, как на шаге 2.
- Так же, как на шаге 3.
Источник: Открытый весенний чемпионат ПетрГУ по программированию, 20 апреля 2014
Обсудить
Отправить решение
Версия для печати