bhupixb

Lazy Propagation

Aug 16th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3. #define ll long long int
  4. #define rep(i,a,n) for(int i = a; i < n; i++)
  5. #define A(v) (v.begin(), v.end())
  6. #define s(x) scanf("%I64d", &x)
  7. #define S(x) scanf("%d", &x)
  8.  
  9. const int N = 1e5+5;
  10.  
  11. vector < long long int > tree(N << 2), lazy(N << 2);
  12. void prop(int node, int l, int r){
  13. if(lazy[node]){
  14. tree[node] += (r - l + 1) * lazy[node];
  15.  
  16. if(l - r){
  17. int lr = node + node;
  18. lazy[lr] += lazy[node];
  19. lazy[lr | 1] += lazy[node];
  20. }
  21. lazy[node] = 0;
  22. }
  23. }
  24. void update(int l, int r, int ql, int qr, int val, int node){
  25. prop(node, l ,r);
  26. if(qr < l or ql > r)return ;
  27.  
  28. if(ql <= l and r <= qr){
  29. lazy[node] = val;
  30. if(l != r)
  31. prop(node, 1, 0);
  32. tree[node] += 1LL * (r-l+1) * val;
  33. lazy[node] = 0;
  34. return ;
  35. }
  36. int mid = (l + r) >> 1, lc = node + node;
  37. update(l, mid, ql, qr, val, lc);
  38. update(mid + 1, r, ql, qr, val, lc | 1);
  39. tree[node] = tree[lc] + tree[lc | 1];
  40. }
  41. ll query(int l, int r, int ql, int qr, int node){
  42. prop(node, l, r);
  43. if(qr < l or ql > r)return 0LL;
  44.  
  45. if(ql <= l and r <= qr)return tree[node];
  46.  
  47. int mid = (l+r) >> 1;
  48. return (query(l, mid, ql, qr, node << 1) + query(mid + 1, r, ql, qr, 2*node + 1));
  49. }
  50. signed main(){
  51. ios_base::sync_with_stdio(false);
  52. cin.tie(NULL);
  53. cout.tie(NULL);
  54. int t;
  55. cin >> t;
  56. while(t--){
  57. int n, i, l, r, q, cnt = 0,ch, val;
  58. for(i = 0; i < N * 4; i++)tree[i] = 0, lazy[i] = 0;
  59.  
  60. cin >> n >> q;
  61. while(q--){
  62.  
  63. cin >> ch >> l >> r;
  64. if(ch == 1)
  65. cout << (query(1, n, l, r, 1)) << '\n';
  66. else
  67. cin >> val,update(1, n, l, r, val,1);
  68. }
  69. }
  70. return 0;
  71. }
Add Comment
Please, Sign In to add comment