CF1264D2 Beautiful Bracket Sequence (hard version)

题目描述

这是本题的困难版本。唯一的区别在于输入字符串的长度 $n$ 的限制。在本版本中,$1 \leq n \leq 10^6$。 我们定义一个合法括号序列及其深度如下: - 空字符串是一个合法括号序列,深度为 $0$。 - 如果 $s$ 是一个深度为 $d$ 的合法括号序列,那么 $(s)$ 是一个深度为 $d+1$ 的合法括号序列。 - 如果 $s$ 和 $t$ 都是合法括号序列,那么它们的连接 $st$ 也是合法括号序列,其深度为 $s$ 和 $t$ 的最大深度。 对于一个(不一定合法的)括号序列 $s$,我们定义其深度为:通过删除 $s$ 中的某些字符(可以为零个)得到的所有合法括号序列中,最大深度的值。例如,括号序列 $s = $ "())(())" 的深度为 $2$,因为删除第三个字符后可以得到合法括号序列 "()(())",其深度为 $2$。 给定一个只包含 '('、')' 和 '?' 的字符串 $a$。考虑将 $a$ 中所有的 '?' 替换为 '(' 或 ')' 得到的所有(不一定合法的)括号序列。请计算所有这些括号序列的深度之和。由于答案可能很大,请输出对 $998244353$ 取模的结果。 本题只有在简单版和困难版都通过后才能 Hack。

输入格式

一行,包含一个只由 '('、')' 和 '?' 组成的非空字符串。字符串长度不超过 $10^6$。

输出格式

输出一个整数,表示所有括号序列深度之和对 $998244353$ 取模的结果。

说明/提示

在第一个测试样例中,将所有 '?' 替换后可以得到 $4$ 个括号序列: - "((",深度为 $0$; - "))",深度为 $0$; - ")(",深度为 $0$; - "()",深度为 $1$。 因此,答案为 $1 = 0 + 0 + 0 + 1$。 在第二个测试样例中,将所有 '?' 替换后可以得到 $4$ 个括号序列: - "(((())",深度为 $2$; - "()()))",深度为 $2$; - "((()))",深度为 $3$; - "()(())",深度为 $2$。 因此,答案为 $9 = 2 + 2 + 3 + 2$。 由 ChatGPT 4.1 翻译