编程题
翻转括号序列 ### 题目描述 给定一个长度为 $n$ 的括号序列,要求支持两种操作: 1. 将 $[L_i, R_i]$ 区间内(序列中的第 $L_i$ 个字符到第 $R_i$ 个字符)的括号全部翻转(左括号变成右括号,右括号变成左括号)。 2. 求出以 $L_i$ 为左端点时,最长的合法括号序列对应的 $R_i$(即找出最大的$R_i$ 使 $[L_i, R_i]$ 是一个合法括号序列)。 ### 输入描述 输入的第一行包含两个整数 $n, m$,分别表示括号序列长度和操作次数。 第二行包含给定的括号序列,括号序列中只包含左括号和右括号。 接下来 $m$ 行,每行描述一个操作。如果该行为 “$1$ $L_i$ $R_i$”,表示第一种操作,区间为 $[L_i, R_i]$;如果该行为 “$2$ $L_i$” 表示第二种操作,左端点为 $L_i$。 ### 输出描述 对于每个第二种操作,输出一行,表示对应的 $R_i$。如果不存在这样的 $R_i$,请输出 $0$。 ### 输入输出样例 #### 示例 >输入 ```txt 7 5 ((())() 2 3 2 2 1 3 5 2 3 2 1 ``` >输出 ```txt 4 7 0 0 ``` ### 评测用例规模与约定 对于 $20$% 的评测用例,$n, m ≤ 5000$; 对于 $40$% 的评测用例,$n, m ≤ 30000$; 对于 $60$% 的评测用例,$n, m ≤ 100000$; 对于所有评测用例,$1 ≤ n ≤ 10^6 , 1 ≤ m ≤ 2 × 10^5$。
查看答案
赣ICP备20007335号-2