Advertisement
Guest User

Untitled

a guest
Aug 20th, 2014
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. //SEGTREE COM LAZY PROPAGATION
  2. #include <cstdio>
  3. #include <cstring>
  4.  
  5. long long segtree[400000], lazy[400000];
  6.  
  7. void propagate(int root, int l, int r) {
  8.   segtree[root] += lazy[root] * (r-l+1);
  9.   if(l != r) {
  10.     lazy[2*root+1] += lazy[root];
  11.     lazy[2*root+2] += lazy[root];
  12.   }
  13.   lazy[root] = 0;
  14. }
  15.  
  16. long long query(int root, int l, int r, int a, int b) {
  17.   if(b < l || r < a) return 0;
  18.  
  19.   propagate(root, l, r);
  20.   if(a <= l && r <= b) return segtree[root];
  21.  
  22.   int mid = (l+r)/2;
  23.   return query(2*root+1, l, mid, a, b) + query(2*root+2, mid+1, r, a, b);
  24. }
  25.  
  26. void update(int root, int l, int r, int a, int b, int val) {
  27.   if(b < l || r < a) return;
  28.   if(a <= l && r <= b) { lazy[root] += val; return; }
  29.  
  30.   int mid = (l+r)/2;
  31.   update(2*root+1, l, mid, a, b, val);
  32.   update(2*root+2, mid+1, r, a, b, val);
  33.  
  34.   propagate(2*root+1, l, mid);
  35.   propagate(2*root+2, mid+1, r);
  36.   segtree[root] = segtree[2*root+1] + segtree[2*root+2];
  37. }
  38.  
  39. int main() {
  40.   int t;
  41.   scanf("%d", &t);
  42.  
  43.   while(t--) {
  44.     int n, c;
  45.     scanf("%d %d", &n, &c);
  46.  
  47.     memset(segtree, 0, sizeof segtree);
  48.     memset(lazy, 0, sizeof lazy);
  49.  
  50.     for(int i = 0; i < c; i++) {
  51.       int type;
  52.       scanf("%d", &type);
  53.  
  54.       int p, q, v;
  55.       if(type == 0) {
  56.         scanf("%d %d %d", &p, &q, &v);
  57.         update(0, 0, n-1, p-1, q-1, v);
  58.       } else if(type == 1) {
  59.         scanf("%d %d", &p, &q);
  60.         printf("%lld\n", query(0, 0, n-1, p-1, q-1));
  61.       }
  62.     }
  63.   }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement