足跡-sokuseki-

りかの日進月歩の記録

AOJ2340 Carpenters' Language

Carpenters' Language | Aizu Online Judge

問題概要

括弧列がvalidであるとは、文脈自由文法で以下のように定義される。

S -> SS | (S) | )S( | ε

あなたは最初、空の括弧列Sを持っている。
 q 回のクエリが与えられる。 i 番目のクエリで p_i, c_i, n_i が与えられるので、Sの  p_i 文字目に  c_i n_i 回挿入し、できた括弧列がvalidであるかを判定してください。

制約

 1 \le q \le 10^5
 0 \le p_i \le i番目のクエリの前の S の長さ
 1 \le n_i \le 2^{20}
 c_i は '(' または ')'

解法

よく考えると、'('の個数と')'の個数が同じだとvalidな括弧列になることがわかるので、オーバーフローを気にしながら'('の数と')'の数が等しいかをチェックすれば良いです。
ちなみにぼくはよく考えてもわかりませんでした。
AIZU ONLINE JUDGE: Code Review