Codeforces Round 604 (Div. 1) |
---|
Закончено |
Это сложная версия этой задачи. Единственное отличие в ограничении на $$$n$$$ — длине входной строки. В этой версии, $$$1 \leq n \leq 10^6$$$.
Определим правильную скобочную последовательность и ее глубину следующим образом:
Для (не обязательно правильной) скобочной последовательности $$$s$$$ мы определяем ее глубину как максимальную глубину любой правильной скобочной последовательности, которая может быть получена с помощью удаления некоторых символов из $$$s$$$ (возможно нуля). Например, скобочная последовательность $$$s = $$$«())(())» имеет глубину $$$2$$$, потому что при удалении третьего символа мы получим правильную скобочную последовательность «()(())» глубины $$$2$$$.
Дана строка $$$a$$$, состоящая из символов '(', ')' и '?'. Рассмотрим все (не обязательно правильные) скобочные последовательности, получающиеся заменой всех символов '?' в строке $$$a$$$ на '(' или ')'. Посчитайте сумму глубин всех таких скобочных последовательностей. Так как это число может быть очень большим, найдите его по модулю $$$998244353$$$.
Взломы по этой задачи могут быть сделаны, только если простая и сложная версия этой задачи сданы.
Единственная строка содержит непустую строку, состоящую только из символов '(', ')' и '?'. Длина строки не превосходит $$$10^6$$$.
Выведите ответ по модулю $$$998244353$$$ в единственной строке.
??
1
(?(?))
9
В первом тесте, мы можем получить $$$4$$$ скобочные последовательности меняя все символы '?' на '(' или ')':
Поэтому, ответ равен $$$1 = 0 + 0 + 0 + 1$$$.
Во втором тесте, мы можем получить $$$4$$$ скобочные последовательности меняя все символы '?' на '(' или ')':
Поэтому, ответ равен $$$9 = 2 + 2 + 3 + 2$$$.
Название |
---|