#P10513. 括号

括号

题目描述

圆给了你一个长度为 nn 的字符串 SSSS 仅由 () 构成。

她会对其做 mm 次操作,操作有两种类型:

  1. 1 l r,她会翻转 llrr 的括号,即 ())(
  2. 2 l r,她想知道区间 [l,r]\left[ l,r\right] 中最长合法括号子序列的长度除以 22 的答案。

圆认为以下的括号序列是合法的:

  1. 空序列是一个合法序列。

  2. 如果 A 是一个合法序列,则 (A) 也是一个合法序列。

  3. 如果 AB 都是合法序列,则 AB 也是一个合法序列。

圆认为,序列 aa 的子序列是满足 1i1<i2<<ikn1\le i_1<i_2<···<i_k \le n 的序列 [ai1,ai2,...aik][a_{i_1},a_{i_2},...a_{i_k}]

由于操作太多了,她算不过来,请你帮帮她吧。

输入格式

第一行一个整数 nn

第二行一个长度为 nn 的字符串 SS,保证仅由 () 构成 。

第三行一行一个整数 mm

接下来 mm 行,每行三个数 opopllrr,对应上面的两种操作。

输出格式

对于每一个 op=2op=2 的操作,输出一行一个整数,表示答案。

6
(()())
5
2 2 3
1 1 3
2 2 3
2 4 6
2 3 6
1
0
1
2

提示

【样例解释】

  • 第一次截取的字符串是 (),答案为 11
  • 翻转后字符串变为 ))(())
  • 第二次截取的字符串是 )(,答案为 00
  • 第三次截取的字符串是 ()),答案为 11
  • 第四次截取的字符串是 (()),答案为 22

【数据范围】

  • 对于 10%10\% 的数据,1n,m5001 \leq n,m \leq 500
  • 对于 20%20\% 的数据,1n,m50001 \leq n,m \leq 5000
  • 对于 40%40\% 的数据,1n,m2×1051 \leq n,m \leq 2\times 10^5
  • 另有 10%10\% 的数据,满足 op=2op=2 且数据随机生成;
  • 另有 15%15\% 的数据,满足 op=2op=2 但不保证数据随机生成;

对于所有数据,保证 1n5×1051\le n \le 5\times 10^51m5×1051\le m \le 5 \times 10^51lrn1 \le l \le r \le nop{1,2}op \in \{1,2\}。数据有梯度。