#codefestivalexhibitionb. [code_festival_exhibition_b]カッコつけ
[code_festival_exhibition_b]カッコつけ
問題文
高橋君は「カッコつけ」です。開きカッコ(
と閉じカッコ)
だけからなる文字列に、新しくカッコを挿入したり削除したりするのが大好きです。 また、各文字列には「カッコ悪さ」という値が定義されます。ある文字列 を「完璧」にするために取り除くべき文字の個数の最小値が「カッコ悪さ」です。 カッコ付けの対応に矛盾がなかった場合その文字列は「完璧」であると言います。特に、0文字の文字列も「完璧」です。
例えば ()()(())
という文字列は「完璧」で、「カッコ悪さ」は です。 ())
は最後のカッコを取り除くと「完璧」になります。よって「カッコ悪さ」は です。
高橋君は文字列 を友人からもらいました。今からこの文字列に開きカッコや閉じカッコを挿入したり、削除したりします。 高橋君はときどき、いまの文字列うちの一部分の「カッコ悪さ」が気になります。 あなたは、高橋君が「カッコ悪さ」を質問した時に、それを求めてください。
入力
入力は以下の形式で標準入力から与えられる
:
- 行目には高橋君が行う操作(質問含む)の回数 が与えられる。
- 行目には高橋君がもらった文字列 が与えられる。
- 行目からの 行のうち 行目には 番目の操作の内容を表す文字 と数値 が空白区切りで与えられる。
- が
(
のとき、開きカッコを挿入する操作を表す。番目に開きカッコを挿入する操作である。このときは常にである。 - が
)
のとき、閉じカッコを挿入する操作を表す。番目に閉じカッコを挿入する操作である。このときは常にである。 - が
D
のとき、削除する操作を表す。番目の文字列を削除する操作である。このときは常にである。 - が
Q
のとき、質問する操作を表す。番目から番目の間(端を含む)の文字列の「カッコ悪さ」を質問するということである。 - 存在しない位置の文字を削除したり、質問したり、存在しない位置に文字を挿入するような入力は無い。また、与えられる全ての位置は1-indexedである。
出力
出力は複数行からなる。 高橋君が質問するたびにその答えを1行で出力せよ。
入力例1
5
(()
D 1 0
( 3 0
Q 1 2
) 1 0
Q 2 4
出力例1
0
1
回目の操作が終わったあとの状態は ()
回目の操作が終わったあとの状態は ())
回目の操作で質問されている範囲の文字列は ()
回目の操作が終わったあとの状態は (())
回目の操作で質問されている範囲の文字列は ())
入力例2
11
(()()(()
( 1 0
( 1 0
D 4 0
Q 2 6
) 5 0
D 8 0
Q 1 9
( 3 0
) 8 0
D 10 0
Q 5 10
出力例2
1
1
4
回目の操作が終わったあとの状態は ((()()(()
回目の操作が終わったあとの状態は (((()()(()
回目の操作が終わったあとの状態は ((()()(()
回目の操作で質問されている範囲の文字列は (()()
回目の操作が終わったあとの状態は ((())()(()
回目の操作が終わったあとの状態は ((())()()
回目の操作で質問されている範囲の文字列は ((())()()
回目の操作が終わったあとの状態は (((())()()
回目の操作が終わったあとの状態は (((())())()
回目の操作が終わったあとの状態は (((())()))
回目の操作で質問されている範囲の文字列は ))()))