CF380C Sereja and Brackets
题目描述
Sereja 有一个括号序列 $s_{1},s_{2},...,s_{n}$,换句话说,就是一个长度为 $n$ 的字符串 $s$,只包含字符“(”和“)”。
Sereja 需要回答 $m$ 个询问,每个询问用两个整数 $l_{i},r_{i}$ $(1 \leq l_{i} \leq r_{i} \leq n)$ 描述。第 $i$ 个询问的答案是序列 $s_{l_{i}},s_{l_{i}+1},...,s_{r_{i}}$ 中,最大合法括号子序列的长度。请你帮助 Sereja 回答所有的询问。
你可以在“提示”部分找到对子序列和合法括号序列的定义。
输入格式
第一行为一个长度为 $n$ 的字符串 $s_{1},s_{2},...,s_{n}$,$(1 \leq n \leq 10^{6})$,字符串中不包含空格。每个字符只可能是“(”或“)”。
第二行为一个整数 $m$ $(1 \leq m \leq 10^5)$,表示询问的个数。
接下来的 $m$ 行,每行两个整数,第 $i$ 行为 $l_{i}, r_{i}$ $(1 \leq l_{i} \leq r_{i} \leq n)$,表示第 $i$ 个询问。
输出格式
对于每个询问,输出答案,每个答案占一行。按照输入顺序输出。
说明/提示
长度为 $|x|$ 的字符串 $s = s_{1}s_{2}\dots s_{|s|}$ 的子序列是指字符串 $x = s_{k_1}s_{k_2}\dots s_{k_{|x|}}$,其中 $1 \leq k_1 < k_2 < \dots < k_{|x|} \leq |s|$。
一个合法的括号序列是指,可以通过在字符串的字符之间插入字符“1”和“+”后,转化为一个合法的算术表达式的括号序列。例如,括号序列“()()”、“(())”是合法的(分别对应的表达式为“(1)+(1)”、“((1+1)+1)”),而“)(”和“(”都不是合法的。
对于第三个询问,所需的括号序列为“()”。
对于第四个询问,所需的括号序列为“()(())(())”。
由 ChatGPT 5 翻译