#749. 括号栈查询

括号栈查询

题目描述

一个字符串 TT 被称为 合法括号序列 当且仅当可以通过若干次(可能为 00 次)以下操作将 TT 变成空串:

  • 选择子串 () 并将其删除。

例如:()(()()) 和空串都是合法括号序列;)()())) 不是合法括号序列。

现在维护一个初始为空的字符串 SS,需要按给定顺序处理 QQ 个操作。每处理完一个操作,请判断当前的 SS 是否为一个合法括号序列。

操作有两种类型:

  • 1 c:给定字符 cccc()),将 cc 追加到 SS 的末尾。
  • 2:删除 SS 的最后一个字符(保证此时 SS 非空)。

处理所有操作,要求在每次操作后输出当前 SS 是否为合法括号序列。

输入格式

输入共 Q+1Q+1 行:

  • 第一行包含一个整数 QQ,表示操作数量。

  • 接下来的 QQ 行,每行是一个操作,格式为:

    • 1 c 表示将字符 cccc())追加到 SS 末尾;
    • 2 表示删除 SS 的最后一个字符(保证操作时 SS 非空)。

输出格式

输出 QQ 行,第 ii 行应为处理完第 ii 个操作后字符串 SS 是否为合法括号序列:

  • 若是,输出 Yes
  • 否则,输出 No

样例输入

8
1 (
2
1 (
1 )
2
1 (
1 )
1 )

样例输出

No
Yes
No
Yes
No
No
No
Yes

说明

样例解释

  • SS 在处理完 第 11 个 操作后立即出现了 (,这不是一个好的括号序列。
  • SS 在处理完 第 22 个 操作后的 SS 是一个空字符串,这是一个良好的括号序列。
  • SS 在处理完 第 33 个 操作之后的 SS(,这不是一个好的括号序列。
  • SS 在处理完 第 44 个 操作后的 SS(),这是一个良好的括号序列。
  • SS 在处理完 第 55 个 操作后, SS 立即是 (,这不是一个好的括号序列。
  • SS 在处理完 第 66 个操作后立即是((,这不是一个好的括号序列。
  • SS 在处理完 第 77 个 操作后立即是 ((),这不是一个好的括号序列。
  • SS 在处理完 第 88 个 操作后立即是 (()),这是一个好的括号序列。

数据范围

  • 1Q8×1051 \le Q \le 8\times 10^{5}
  • 操作中出现的字符 cc 仅为 ()
  • 保证在出现类型 2 的操作时,当前 SS 非空。