Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of length n and q questions.
The i-th question is whether P remains balanced after p ai and p bi swapped. Note that questions are individual so that they have no affect on others.
Parenthesis sequence S is balanced if and only if:
1. S is empty;
2. or there exists balanced parenthesis sequence A,B such that S=AB;
3. or there exists balanced parenthesis sequence S' such that S=(S').
Input
The input contains at most 30 sets. For each set:
The first line contains two integers n,q (2≤n≤10 5,1≤q≤10 5).
The second line contains n characters p 1 p 2…p n.
The i-th of the last q lines contains 2 integers a i,b i (1≤a i,b i≤n,a i≠b i).
OutputFor each question, output " Yes" if P remains balanced, or " No" otherwise.Sample Input
4 2(())1 32 32 1()1 2
Sample Output
NoYesNo
Hint
题意:
给你一个长度为N个合法的括号字符串,然后有 Q 个询问,每一个询问Q,有一个L和R,如果字符串中的L和R位置的两个字符交换后,括号字符串仍然合法的话,那么输出Yes,否则输出No。
思路:
可以用树状数组维护一下,
我们定义如下,如果字符是'(' 我们定他的权值为-1,')' 定义权值为 +1,
我们容易知道,一个合法的字符串的总权值和是0.,并且一个合法的括号串,不存在任意一个位置i,1~i到sum和不大于0。
因为题目给的是一个合法的字符串,那么每一次询问的时候,我们把对应的位置的数值给改变一下,
然后检测如下条件是否成立。
sum(1~l),sum( 1~l+1 ) ,sum(1~r),sum( 1~ r+1 )
需要以上的值均小于等于0,那么这个字符串一定是合法的。
我们可以通过树状数组来做,因为基础的树状数组模板就有单点修改,区间查询的功能。
细节见代码:
#include#include #include #include #include #include #include #include