Advertisement
Guest User

doLazy

a guest
Apr 22nd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAXN 100100
  3.  
  4. using namespace std;
  5.  
  6. typedef long long ll;
  7.  
  8. int T, N, C;
  9.  
  10. ll tree[4*MAXN], lazy[4*MAXN];
  11.  
  12. ll mergeValues(ll x, ll y){
  13.   return x + y;
  14. }
  15.  
  16. void doLazy(int id, int l, int r){
  17.   if (lazy[id] != 0){
  18.     tree[id] += lazy[id] * (r - l + 1);
  19.     if (l != r){
  20.       lazy[id*2] += lazy[id];
  21.       lazy[id*2+1] += lazy[id];
  22.     }
  23.     lazy[id] = 0;
  24.   }
  25. }
  26.  
  27. void update(int id, int l, int r, int x, int y, ll val){
  28.   doLazy(id, l, r);
  29.   if (x > r || y < l) return;
  30.   if (x <= l && y >= r){
  31.     lazy[id] += val;
  32.     doLazy(id, l, r);
  33.     return;
  34.   }
  35.   int mid = (l + r) / 2;
  36.   update(id*2, l, mid, x, y, val);
  37.   update(id*2 + 1, mid + 1, r, x, y, val);
  38.   tree[id] = mergeValues(tree[id*2], tree[id*2+1]);
  39. }
  40.  
  41. ll query(int id, int l, int r, int x, int y){
  42.   doLazy(id, l, r);
  43.   if (x > r || y < l) return 0;
  44.   if (x <= l && y >= r) return tree[id];
  45.   int mid = (l + r) / 2;
  46.   return mergeValues(query(id*2, l, mid, x, y),
  47.                     query(id*2 + 1, mid + 1, r, x, y));
  48. }
  49.  
  50. int main(){
  51.   scanf("%d", &T);
  52.   while (T--){
  53.     scanf("%d %d", &N, &C);
  54.     memset(lazy, 0, sizeof lazy);
  55.     memset(tree, 0, sizeof tree);
  56.     while (C--){
  57.       int type, p, q;
  58.       ll v;
  59.       scanf("%d", &type);
  60.       if(type == 0){
  61.         scanf("%d %d %lld", &p, &q, &v);
  62.         update(1, 1, N, p, q, v);
  63.       } else{
  64.         scanf("%d %d", &p, &q);
  65.         ll ans = query(1, 1, N, p, q);
  66.         printf("%lld\n", ans);
  67.       }
  68.     }
  69.   }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement