Saleh127

HackerEarth Help Ashu

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