G - Parenthesis CSU - 1809 (siwei)

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 3
2 3
2 1
()
1 2
Sample Output
No
Yes
No
Hint
 是真的被自己菜到 了好烦看到括号就不想做

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1e5+10;
char str [maxn];
int main()
{
	int n,q,x,y,a,b;
	while(scanf("%d%d",&n,&q)!=EOF)
	{
		scanf("%s",str+1);
		while(q--)
		{
			scanf("%d%d",&a,&b);
			x = min(a,b);
			y = max(a,b);
			if(str[x] == str[y])
			{
				printf("Yes\n");
				continue;
			}else if(str[x]==')'&&str[y]=='(')
			{
				printf("Yes\n");
				continue;
			}else 
			{
				swap(str[x],str[y]);
				int sum = 0;
				for(int i =1;i<=n;i++)
				{
					if(str[i]=='(')sum++;
					else sum--;
					if(sum<0) break;
				}
				if(sum==0)printf("Yes\n");
				else printf("No\n");
				swap(str[x],str[y]);
			}
		}	
	}
	return  0 ;
}



猜你喜欢

转载自blog.csdn.net/galesaur_wcy/article/details/80158925