Advertisement
Saleh127

Light OJ 1080

Jul 19th, 2021
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  5. struct fun
  6. {
  7.  
  8. ll s=0,p=0;
  9.  
  10. } tree[402006];
  11. char a[102005];
  12.  
  13. void treeconstruct(ll node,ll b,ll e)
  14. {
  15.  
  16. if(b==e)
  17. {
  18. tree[node].s=a[b]-'0';
  19. return;
  20. }
  21.  
  22. ll left = node*2;
  23. ll right = node*2 + 1ll;
  24.  
  25. ll mid=(b+e)/2;
  26.  
  27. treeconstruct(left,b,mid);
  28. treeconstruct(right,mid+1,e);
  29.  
  30. tree[node].s=tree[left].s+tree[right].s;
  31.  
  32. }
  33.  
  34. void update(ll node,ll b,ll e,ll i,ll j)
  35. {
  36.  
  37. if(i>e || j<b) return;
  38.  
  39. if(b>=i && e<=j)
  40. {
  41. tree[node].s+=(e-b+1);
  42. tree[node].p+=1;
  43. return;
  44. }
  45.  
  46. ll left = node*2;
  47. ll right = node*2 + 1ll;
  48.  
  49. ll mid=(b+e)/2;
  50.  
  51. update(left,b,mid,i,j);
  52.  
  53. update(right,mid+1,e,i,j);
  54.  
  55. tree[node].s = tree[left].s + tree[right].s + tree[node].p* (e-b)+1;
  56. }
  57.  
  58. ll queries(ll node,ll b,ll e,ll i,ll c)
  59. {
  60. if(i>e || i<b) return 0ll;
  61.  
  62. if(b>=i && e<=i)
  63. {
  64. return tree[node].s+c*(e-b+1);
  65. }
  66.  
  67. ll left = node*2;
  68. ll right = node*2 + 1ll;
  69.  
  70. ll mid=(b+e)/2;
  71.  
  72. ll x=queries(left,b,mid,i,c+tree[node].p);
  73.  
  74. ll y=queries(right,mid+1,e,i,c+tree[node].p);
  75.  
  76. return x+y;
  77.  
  78. }
  79.  
  80.  
  81. int main()
  82. {
  83. ios_base::sync_with_stdio(0);
  84. cin.tie(0);
  85. cout.tie(0);
  86.  
  87.  
  88. test
  89. {
  90. ll q,n,m,i,j,k,l;
  91.  
  92. cin>>a;
  93. cin>>q;
  94.  
  95. n=strlen(a)-1;
  96.  
  97. memset(tree,0ll,sizeof tree);
  98.  
  99. treeconstruct(1ll,0ll,n);
  100.  
  101. cout<<"Case "<<cs<<":"<<endl;
  102.  
  103. while(q--)
  104. {
  105. char ch;
  106.  
  107. cin>>ch;
  108.  
  109. if(ch=='I')
  110. {
  111. cin>>j>>l;
  112. j--,l--;
  113. update(1ll,0ll,n,j,l);
  114. }
  115.  
  116. else if(ch=='Q')
  117. {
  118. cin>>j;
  119. j--;
  120. m=queries(1ll,0ll,n,j,0ll);
  121.  
  122. cout<<m%2<<endl;
  123. }
  124. }
  125.  
  126. }
  127.  
  128. return 0;
  129. }
  130.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement