Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define M 100100
- int bal[M];
- int tree[4*M];
- int lazy[4*M];
- void update(int node,int b,int e,int i,int j,int val)
- {
- if(lazy[node])
- {
- tree[node]+=(e-b+1)*lazy[node];
- if(b!=e)
- {
- lazy[node*2]+=lazy[node];
- lazy[node*2+1]+=lazy[node];
- }
- lazy[node]=0;
- }
- if(e<i || b>j)
- return;
- if(b>=i && e<=j)
- {
- tree[node]+=(e-b+1)*val;
- if(b!=e)
- {
- lazy[node*2]+=val;
- lazy[node*2+1]+=val;
- }
- return ;
- }
- int mid=(b+e)/2;
- int left=node<<1;
- int right=left+1;
- update(left,b,mid,i,j,val);
- update(right,mid+1,e,i,j,val);
- tree[node]=tree[left]+tree[right];
- }
- int query(int node,int b,int e,int i)
- {
- if(lazy[node])
- {
- tree[node]+=(e-b+1)*lazy[node];
- if(b!=e)
- {
- lazy[node*2]+=lazy[node];
- lazy[node*2+1]+=lazy[node];
- }
- lazy[node]=0;
- }
- if(b==i && e==i)
- {
- return tree[node];
- }
- int mid=(b+e)/2;
- int left=node*2;
- int right=left+1;
- int p1;
- if(i<=mid)
- {
- p1=query(left,b,mid,i);
- }
- else
- {
- p1=query(right,mid+1,e,i);
- }
- return p1;
- }
- int main()
- {
- int t,kase=0;
- scanf("%d ",&t);
- while(kase<t)
- {
- char a[M];
- int b[M];
- int Q;
- gets(a);
- int i,len=strlen(a);
- int j=1;
- for(i=0;i<len;i++)
- {
- if(a[i]=='1')
- {
- b[j++]=1;
- }
- else
- {
- b[j++]=0;
- }
- }
- scanf("%d",&Q);
- //cout<<Q<<endl;
- int q,p,k=0,ki=0;
- while(Q--)
- {
- //getchar();
- char c;
- scanf(" %c",&c);
- // cout<<c<<endl;
- if(c=='I')
- {
- scanf("%d %d",&p,&q);
- update(1,1,len,p,q,1);
- }
- else
- {
- int konta;
- scanf("%d",&konta);
- int ans=query(1,1,len,konta);
- //cout<<ans<<endl;
- if(ki==0)
- {
- printf("Case %d:\n",kase+1);
- ki++;
- }
- if(ans%2==0)
- {
- printf("%d\n",b[konta]);
- }
- else
- {
- int bal=!b[konta];
- printf("%d\n",bal);
- }
- }
- }
- kase++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment