Maruf_Hasan

1080

Feb 17th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define M 100100
  4. int bal[M];
  5. int tree[4*M];
  6. int lazy[4*M];
  7.  
  8.  
  9. void update(int node,int b,int e,int i,int j,int val)
  10. {
  11. if(lazy[node])
  12. {
  13. tree[node]+=(e-b+1)*lazy[node];
  14. if(b!=e)
  15. {
  16. lazy[node*2]+=lazy[node];
  17. lazy[node*2+1]+=lazy[node];
  18. }
  19. lazy[node]=0;
  20. }
  21. if(e<i || b>j)
  22. return;
  23. if(b>=i && e<=j)
  24. {
  25. tree[node]+=(e-b+1)*val;
  26. if(b!=e)
  27. {
  28. lazy[node*2]+=val;
  29. lazy[node*2+1]+=val;
  30. }
  31. return ;
  32. }
  33. int mid=(b+e)/2;
  34. int left=node<<1;
  35. int right=left+1;
  36. update(left,b,mid,i,j,val);
  37. update(right,mid+1,e,i,j,val);
  38. tree[node]=tree[left]+tree[right];
  39. }
  40.  
  41. int query(int node,int b,int e,int i)
  42. {
  43. if(lazy[node])
  44. {
  45. tree[node]+=(e-b+1)*lazy[node];
  46. if(b!=e)
  47. {
  48. lazy[node*2]+=lazy[node];
  49. lazy[node*2+1]+=lazy[node];
  50. }
  51. lazy[node]=0;
  52. }
  53. if(b==i && e==i)
  54. {
  55. return tree[node];
  56. }
  57. int mid=(b+e)/2;
  58. int left=node*2;
  59. int right=left+1;
  60. int p1;
  61. if(i<=mid)
  62. {
  63. p1=query(left,b,mid,i);
  64. }
  65. else
  66. {
  67. p1=query(right,mid+1,e,i);
  68. }
  69. return p1;
  70. }
  71. int main()
  72. {
  73. int t,kase=0;
  74. scanf("%d ",&t);
  75. while(kase<t)
  76. {
  77.  
  78. char a[M];
  79. int b[M];
  80. int Q;
  81. gets(a);
  82. int i,len=strlen(a);
  83. int j=1;
  84. for(i=0;i<len;i++)
  85. {
  86. if(a[i]=='1')
  87. {
  88. b[j++]=1;
  89. }
  90. else
  91. {
  92. b[j++]=0;
  93. }
  94. }
  95. scanf("%d",&Q);
  96. //cout<<Q<<endl;
  97. int q,p,k=0,ki=0;
  98. while(Q--)
  99. {
  100. //getchar();
  101. char c;
  102. scanf(" %c",&c);
  103. // cout<<c<<endl;
  104.  
  105. if(c=='I')
  106. {
  107.  
  108. scanf("%d %d",&p,&q);
  109. update(1,1,len,p,q,1);
  110. }
  111. else
  112. {
  113.  
  114. int konta;
  115. scanf("%d",&konta);
  116. int ans=query(1,1,len,konta);
  117. //cout<<ans<<endl;
  118.  
  119. if(ki==0)
  120. {
  121. printf("Case %d:\n",kase+1);
  122. ki++;
  123. }
  124.  
  125. if(ans%2==0)
  126. {
  127. printf("%d\n",b[konta]);
  128. }
  129. else
  130. {
  131. int bal=!b[konta];
  132. printf("%d\n",bal);
  133. }
  134. }
  135. }
  136. kase++;
  137. }
  138.  
  139. return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment