Beautiful Bracket Sequence (hard version)
题意翻译
给定一个长度为$n$的字符串,其中只有```(, ), ?```三种字符,其中```?```可以为```(```或者```)```
对于一个括号序列,定义其权值为其通过**删除字符**后可以得到的合法的括号匹配的最深的深度,下面是一些括号匹配的例子:
深度为$1:()$
深度为$2:(())$
深度为$3:((()))$
下面这个例子是一个深度为$0$的括号序列,当然其权值也为$0$
深度为$0:(($
您希望求出所有可能的括号序列(即问号替换后)的权值,答案对$998244353$取模
翻译:by Soulist
题目描述
This is the hard version of this problem. The only difference is the limit of $ n $ - the length of the input string. In this version, $ 1 \leq n \leq 10^6 $ .
Let's define a correct bracket sequence and its depth as follow:
- An empty string is a correct bracket sequence with depth $ 0 $ .
- If "s" is a correct bracket sequence with depth $ d $ then "(s)" is a correct bracket sequence with depth $ d + 1 $ .
- If "s" and "t" are both correct bracket sequences then their concatenation "st" is a correct bracket sequence with depth equal to the maximum depth of $ s $ and $ t $ .
For a (not necessarily correct) bracket sequence $ s $ , we define its depth as the maximum depth of any correct bracket sequence induced by removing some characters from $ s $ (possibly zero). For example: the bracket sequence $ s = $ "())(())" has depth $ 2 $ , because by removing the third character we obtain a correct bracket sequence "()(())" with depth $ 2 $ .
Given a string $ a $ consists of only characters '(', ')' and '?'. Consider all (not necessarily correct) bracket sequences obtained by replacing all characters '?' in $ a $ by either '(' or ')'. Calculate the sum of all the depths of all these bracket sequences. As this number can be large, find it modulo $ 998244353 $ .
Hacks in this problem can be done only if easy and hard versions of this problem was solved.
输入输出格式
输入格式
The only line contains a non-empty string consist of only '(', ')' and '?'. The length of the string is at most $ 10^6 $ .
输出格式
Print the answer modulo $ 998244353 $ in a single line.
输入输出样例
输入样例 #1
??
输出样例 #1
1
输入样例 #2
(?(?))
输出样例 #2
9
说明
In the first test case, we can obtain $ 4 $ bracket sequences by replacing all characters '?' with either '(' or ')':
- "((". Its depth is $ 0 $ ;
- "))". Its depth is $ 0 $ ;
- ")(". Its depth is $ 0 $ ;
- "()". Its depth is $ 1 $ .
So, the answer is $ 1 = 0 + 0 + 0 + 1 $ .
In the second test case, we can obtain $ 4 $ bracket sequences by replacing all characters '?' with either '(' or ')':
- "(((())". Its depth is $ 2 $ ;
- "()()))". Its depth is $ 2 $ ;
- "((()))". Its depth is $ 3 $ ;
- "()(())". Its depth is $ 2 $ .
So, the answer is $ 9 = 2 + 2 + 3 + 2 $ .