#P3215. [HNOI2011] 括号修复 / [JSOI2011] 括号序列
[HNOI2011] 括号修复 / [JSOI2011] 括号序列
题目描述
一个合法的括号序列是这样定义的:
- 空串是合法的。
- 如果字符串
S是合法的,则(S)也是合法的。 - 如果字符串
A和B是合法的,则AB也是合法的。
现在给你一个长度为 的由(和)组成的字符串,位置标号从 到 。对这个字符串有下列四种操作:
-
Replace a b c:将 之间的所有括号改成 。假设原来的字符串为:))())())(,那么执行操作Replace 2 7 (后原来的字符串变为:)(((((()(。 -
Swap a b:将 之间的字符串翻转。假设原来的字符串为:))())())(,那么执行操作Swap 3 5后原来的字符串变为:))))(())(。 -
Invert a b:将 之间的(变成),)变成(。假设原来的字符串为:))())())(,那么执行操作Invert 4 8后原来的字符串变为:))((()(((。 -
Query a b:询问 之间的字符串至少要改变多少位才能变成合法的括号序列。改变某位是指将该位的(变成)或)变成(。注意执行操作Query并不改变当前的括号序列。假设原来的字符串为:))())())(,那么执行操作Query 3 6的结果为 ,因为要将位置 的)变成(并将位置 的(变成)。
输入格式
输入文件的第一行是用空格隔开的两个正整数 ,分别表示字符串的长度和将执行的操作个数。
第二行是长度为 的初始字符串 。接下来的 行是将依次执行的个操作,其中操作名与操作数之间以及相邻操作数之间均用空格隔开。
输出格式
对于每个 Query 操作,输出一行一个整数表示答案。输入数据保证有解。
4 5
((((
Replace 1 2 )
Query 1 2
Swap 2 3
Invert 3 4
Query 1 4
1
2
提示
样例解释
输入中有 个 Query 操作,所以输出有 行。
执行第一个 Query 操作时的括号序列为 ))((,因改变第 位可使 之间的字符串变成合法的括号序列,故输出的第一行为 1。
执行第二个 Query 操作时的括号序列为 )((),因要改变第 位和第 位才能使 之间的字符串变成合法的括号序列,故输出的第二行为 2。
数据范围
对于 的数据,;
对于 的数据,。