Codeforces Round 603 (Div. 2) |
---|
Закончено |
Разработка текстового редактора — непростая задача. Ваша задача реализовать вспомогательный модуль для подсистемы подсветки скобок в тексте.
Ваш редактор состоит из строки бесконечной длины и курсора, который указывает на текущий символ. Обратите внимание, что он указывает точно на один из символов (а не между парой символов). Таким образом, положение курсора характеризуется индексом символа, на который он указывает. Пользователь может двигать курсор влево или вправо на одну позицию. Если курсор уже находится на первом (самом левом) символе, то сдвиг влево не производится.
Изначально все символы строки равны пробелу, курсор находится в первой (самой левой) позиции.
Кроме этого пользователь может записать букву или круглую скобку (либо '(', либо ')') в позицию, на которой в настоящий момент указывает курсор. Новый символ всегда перезаписывает старое значение в этой позиции.
Ваш редактор должен уметь проверять, является ли текущая строка, набранная пользователем, «корректным текстом». Текст является корректным, если скобки в нём образуют правильную скобочную последовательность.
Формально, корректный текст (КТ) должен удовлетворять следующим правилам:
Примеры корректных текстов: «hello(codeforces)», «round», «((i)(write))edi(tor)s», «( me)». Примеры текстов, которые не являются корректными: «hello)oops(», «round)», «((me)».
Пользователь использует специальные команды для работы с вашим редактором. Каждой команде соответствует свой символ, который нужно нажать, чтобы выполнить эту команду.
Соответствие команд и символов следующее:
Для полного понимания изучите первый пример и его иллюстрации в примечании ниже.
Вам дана строка, содержащая символы, которые вводил пользователь. Для работы подсистемы подсветки скобок Вам требуется после каждой команды:
Если две пары скобок являются вложенными (первая во вторую или наоборот), то эти пары скобок должны быть раскрашены в разные цвета. Если две пары скобок не вложены, то они могут быть покрашены как в разные, так и в одинаковые цвета. Например, для скобочной последовательности «()(())()()» наименьшее количество цветов равно $$$2$$$, а для для скобочной последовательности «(()(()())())(())» — равно $$$3$$$.
Напишите программу, которая выводит требуемую информацию после обработки каждой команды.
Первая строка входных данных содержит целое число $$$n$$$ ($$$1 \le n \le 10^6$$$) — количество команд. Вторая строка содержит $$$s$$$ — последовательность команд. Строка $$$s$$$ состоит из $$$n$$$ символов. Гарантируется, что все символы в строке являются корректными командами.
В единственной строке выведите $$$n$$$ целых чисел, где $$$i$$$-е число равно:
11 (RaRbR)L)L(
-1 -1 -1 -1 -1 -1 1 1 -1 -1 2
11 (R)R(R)Ra)c
-1 -1 1 1 -1 -1 1 1 1 -1 1
В первом примере текст в редакторе будет принимать следующий вид:
(
^
(
^
(a
^
(a
^
(ab
^
(ab
^
(ab)
^
(ab)
^
(a))
^
(a))
^
(())
^
Название |
---|