
guys why tle????????? #define X 30009 char arr[X];
struct node { int left; int right; }; struct node seg[4*X]; void init(int i,int j,int node){ if(i == j) { if(arr[i]=='(') { seg[node].left = 0; seg[node].right = 1; } else if(arr[i]==')') { seg[node].left = 1; seg[node].right = 0; } } else { int mid = (i+j)>>1; init(i,mid,2*node); init(mid + 1,j,1+2*node); int mint = min(seg[2*node].right,seg[2*node+1].left);
seg[node].left = seg[2*node].left  mint + seg[2*node+1].left; seg[node].right = seg[2*node+1].right  mint + seg[2*node].right;
} } void update(int i,int j, int index,int node) { if(i == j) { if(arr[i] == '(') { arr[i] = ')'; seg[node].right; seg[node].left++; } else{ arr[i] = '('; seg[node].left; seg[node].right++; } } else { int mid = (i+j)>>1; update(i,mid,index,2*node); update(mid + 1,j,index,1+2*node); int mint = min(seg[2*node].right,seg[2*node+1].left);
seg[node].left = seg[2*node].left  mint + seg[2*node+1].left; seg[node].right = seg[2*node+1].right  mint + seg[2*node].right; } } void build_tree(int sz) { init(0,sz1,1); } int main() { int n =10; int tt =1; while(n) { int x = 0; printf("Test %d:\n", tt++); scanf("%d", &x); scanf("%s",arr); build_tree(x); int q =0; scanf("%d", &q); while(q) { int a =0; scanf("%d", &a); if(a == 0) { int ans = !seg[1].left && !seg[1].right; if (ans) puts("YES"); else puts("NO"); } else update(0,x1,a1,1); } } return 0; } 