Advertisement
Farjana_akter

Untitled

Dec 12th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long int ll;
  4.  
  5. ll tree[2000005],lazy[2000005],arr[2000005]={0};
  6.  
  7.  
  8.  
  9. void buildtree(ll node,ll start,ll finish)
  10. {
  11. if(start==finish)
  12. {
  13. tree[node]=arr[finish];
  14. return;
  15. }
  16. ll left=node*2;
  17. ll right=left+1;
  18. ll mid=(start+finish)/2;
  19. buildtree(left,start,mid);
  20. buildtree(right,mid+1,finish);
  21. tree[node]=tree[left]+tree[right];
  22. }
  23.  
  24. void clearlazy(ll node,ll start,ll finish)
  25. {
  26. tree[node]+=((finish-start+1)*lazy[node]);
  27. if(start!=finish)
  28. {
  29. ll left=node*2;
  30. ll right=left+1;
  31. lazy[left]+=lazy[node];
  32. lazy[right]+=lazy[node];
  33. }
  34. lazy[node]=0;
  35. }
  36.  
  37.  
  38. void update(ll node,ll start,ll finish,ll ranges,ll rangef,ll value)
  39. {
  40. clearlazy(node,start,finish);
  41. if(ranges>finish || rangef<start)
  42. return;
  43. if(ranges<=start&&rangef>=finish)
  44. {
  45. lazy[node]=value;
  46. clearlazy(node,start,finish);
  47. return;
  48. }
  49. ll mid=(start+finish)/2;
  50. ll left=node*2;
  51. ll right=left+1;
  52. update(left,start,mid,ranges,rangef,value);
  53. update(right,mid+1,finish,ranges,rangef,value);
  54. tree[node]=tree[left]+tree[right];
  55. }
  56.  
  57.  
  58. ll query(ll node,ll start,ll finish,ll ranges,ll rangef)
  59. {
  60. clearlazy(node,start,finish);
  61. if(ranges>finish || rangef<start)
  62. return 0;
  63. if(ranges<=start&&rangef>=finish)
  64. {
  65. return tree[node];
  66. }
  67. ll mid=(start+finish)/2;
  68. ll left=node*2;
  69. ll right=left+1;
  70.  
  71. ll ans1=query(left,start,mid,ranges,rangef);
  72. ll ans2=query(right,mid+1,finish,ranges,rangef);
  73.  
  74. return ans1+ans2;
  75. }
  76.  
  77. int main()
  78. {
  79. ll n,q,i,j,k,ranges,rangef,ans,value,t,cas,flag;
  80. scanf("%lld",&t);
  81. for(cas=1;cas<=t;cas++)
  82. {
  83. memset(arr,0,sizeof(arr));
  84. memset(tree,0,sizeof(tree));
  85. memset(lazy,0,sizeof(lazy));
  86. scanf("%lld %lld",&n,&q);
  87. buildtree(1,1,n);
  88. printf("Case %lld:\n",cas);
  89. while(q--)
  90. {
  91. scanf("%lld %lld %lld",&flag,&ranges,&rangef);
  92. if(flag==0)
  93. {
  94. scanf("%lld",&value);
  95. update(1,1,n,ranges+1,rangef+1,value);
  96. }
  97. else
  98. {
  99. ans=query(1,1,n,ranges+1,rangef+1);
  100. printf("%lld\n",ans);
  101. }
  102. }
  103. }
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement