Advertisement
hkshakib

Untitled

Mar 18th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=100005;
  5. long long int lazy[4*N];
  6. long long int seg[4*N];
  7.  
  8. void build(int low,int high,int node)
  9. {
  10. if(low>high)
  11. return;
  12. if(low == high)
  13. {
  14. seg[node]=0;
  15. return;
  16. }
  17. int mid = low+high>>1;
  18. build(low,mid,2*node+1);
  19. build(mid+1,high,2*node+2);
  20. seg[node]=seg[2*node+1]+seg[2*node+2];
  21. }
  22.  
  23. void update(int low,int high,int lq,int hq,int node,long long int val)
  24. {
  25. if(lazy[node])
  26. {
  27. seg[node]+=(high-low+1)*lazy[node];
  28. if(high!=low)
  29. {
  30. lazy[2*node+1]+=lazy[node];
  31. lazy[2*node+2]+=lazy[node];
  32. }
  33. lazy[node]=0;
  34. }
  35. if(low>hq || high<lq)
  36. return;
  37. if(lq<=low && high<=hq)
  38. {
  39. seg[node]+=(high-low+1)*val;
  40. if(high!=low)
  41. {
  42. lazy[2*node+1]+=val;
  43. lazy[2*node+2]+=val;
  44. }
  45. return;
  46. }
  47. int mid=low+high>>1;
  48. update(low,mid,lq,hq,2*node+1,val);
  49. update(mid+1,high,lq,hq,2*node+2,val);
  50. seg[node]=seg[2*node+1]+seg[2*node+2];
  51. }
  52.  
  53. long long int query(int low,int high,int lq,int hq,int node)
  54. {
  55. if(lazy[node])
  56. {
  57. seg[node]+=(high-low+1)*lazy[node];
  58. if(high!=low)
  59. {
  60. lazy[2*node+1]+=lazy[node];
  61. lazy[2*node+2]+=lazy[node];
  62. }
  63. lazy[node]=0;
  64. }
  65. if(low>hq || high<lq)
  66. return 0;
  67. if(lq<=low && high<=hq)
  68. {
  69. return seg[node];
  70. }
  71. int mid=low+high>>1;
  72. return query(low,mid,lq,hq,2*node+1)+query(mid+1,high,lq,hq,2*node+2);
  73. }
  74. int main()
  75. {
  76. ///freopen("t.txt","w",stdout);
  77. int t,cnt=1;
  78. scanf("%d",&t);
  79. int n,q;
  80. while(t--)
  81. {
  82. memset(seg,0,sizeof(seg));
  83. memset(lazy,0,sizeof(lazy));
  84. scanf("%d %d",&n,&q);
  85. int type;
  86. int x,y;
  87. long long int val;
  88. build(0,n-1,0);
  89. printf("Case %d:\n",cnt++);
  90. while(q--)
  91. {
  92. scanf("%d",&type);
  93. if(type)
  94. {
  95. scanf("%d %d",&x,&y);
  96. printf("%lld\n",query(0,n-1,x-1,y-1,0));
  97. }
  98. else
  99. {
  100. scanf("%d %d %lld",&x,&y,&val);
  101. update(0,n-1,x-1,y-1,0,val);
  102. }
  103. }
  104. }
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement