3941 | naoya_t | SHORTEN | CPP | Accepted | 18.2888

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct B{int o,c;struct B*l,*r;}S;S*at,A[200000];void F(S*s,char*w,int l){if(l==0)return;if(l==1){s->o=(*w=='(');s->c=(*w==')');s->r=s->l=NULL;return;}s->l=at++,s->r=at++;F(s->l,w,l/2);F(s->r,w+l/2,l-l/2);S*L=s->l,*R=s->r;if(L->o>=R->c)s->o=L->o+R->o-R->c,s->c=L->c;else s->o=R->o,s->c=R->c+L->c-L->o;}void G(S*s,char k,int l,int i){if(!(s->l||s->r)){if(k=='(')s->o++,s->c--;else s->o--,s->c++;return;}if(i<l/2)G(s->l,k,l/2,i);else G(s->r,k,l-l/2,i-l/2);S*L=s->l,*R=s->r;if(L->o>=R->c)s->o=L->o+R->o-R->c,s->c=L->c;else s->o=R->o,s->c=L->c+R->c-L->o;}int main(){int T;scanf("%d",&T);while(T--){printf("%d:\n",10-T);char w[40000];int l;scanf("%d%s",&l,w);at=A+1;S*s=A;memset(s,0,sizeof(A));F(s,w,l);int M;scanf("%d\n",&M);while(M--){char v[11];gets(v);int k=atoi(v)-1;if(k<0)printf("%s\n",s->o||s->c?"NO":"YES");else{w[k]=w[k]=='('?')':'(';G(s,w[k],l,k);}}}return 0;}