完美世界
题号:NC54760
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Bob有一个长度为 n 的括号序列 S( 仅含有 '(' 和 ')'),有一天他对该序列作出m次如下操作:

1. c l r 将下标为l,r的括号取反,即 '(' 转换成 ')' ,')' 转换成 '(' ,并回答当前**S是否完全匹配**.

2. q l r 回答**区间[l,r]的括号序列是否完全匹配**.

3. t l r 将下标为 l 和 r 的括号进行交换,并回答当前**S是否完全匹配**.

定义一个括号序列 S 是完全匹配的当且仅当:

1. S 为空 ;

2. 或存在完全匹配的括号序列A,B,且S = AB

3.或存在完全匹配的括号序列 S' ,且 S = ( S' )

注意上述定义其实合法括号序列的递归定义,若不理解可以无视,完全匹配的定义是只要当前询问的括号**合法**即可,即不存在不能匹配的左括号与右括号。

但这个问题实在是太难了,Bob无法解决,所以他把这个问题转交给你。

,,

输入描述:

第一行两个整数,表示n和m

第二行输入长度为 n (保证n为偶数)的字符串 S

接下来m次询问, x l r ,x 表示进行操作的类型,l r 表示区间下标(x { 'c','q','t' } )

输出描述:

若当前所需询问的括号序列合法,则输出"YES",反之输出"NO"(输出时不带引号).
示例1

输入

复制
4 3
())(
c 3 4
t 3 4
q 1 2

输出

复制
YES 
NO
YES

备注:

注意上述操作下标都是从1开始.