➤ Problem Link : BRCKTS
👉 Hint : edit please
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int #define mp make_pair pair<int,int> st[400001]; char arr[100001]; void build(int v, int l, int r) { if(l==r) { if(arr[l]=='(') st[v]=mp(1,0); else st[v]=mp(0,1); return ; } int mid=(l+r)/2; build(2*v,l,mid); build(2*v+1,mid+1,r); st[v].first=st[2*v+1].first; st[v].second=st[2*v].second; int val=st[2*v].first - st[2*v+1].second; if(val>0) st[v].first+=val; else st[v].second+=abs(val); } void update(int v, int l,int r,int ind) { if(l==r) { if(st[v].first==1) { st[v].first=0; st[v].second=1; } else { st[v].second=0; st[v].first=1; } return; } int mid=(l+r)/2; if(ind>=l && ind<=mid) update(2*v,l,mid,ind); else update(2*v+1,mid+1,r,ind); st[v].first=st[2*v+1].first; st[v].second=st[2*v].second; int val=st[2*v].first - st[2*v+1].second; if(val>0) st[v].first+=val; else st[v].second+=abs(val); } string query() { // cout<<st[1].first<<" "<<st[1].second<<endl; if(st[1].first==0 && st[1].second==0) return "YES\n"; return "NO\n"; } int main() { for(int i=1;i<=10;i++) { int n,m,x; cin>>n; for(int i=1;i<=n;i++) cin>>arr[i]; build(1,1,n); cout<<"Test "<<i<<":\n"; cin>>m; while(m--) { cin>>x; if(x==0) cout<<query(); else update(1,1,n,x); } } }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!