Manioc

ajudando thtuth

Apr 22nd, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 100007
  3.  
  4. typedef long long ll;
  5. using namespace std;
  6.  
  7. ll st[4*MAX], acum[4*MAX];
  8.  
  9. void add(int id, int l, int r, ll val){
  10.     st[id] += val*(r-l+1);
  11.     acum[id] += val;
  12. }
  13. void f5(int id, int l, int r, int x, int y, ll val){
  14.     if(l > y || r < x) return;
  15.     else if(x <= l && r <= y) add(id, l, r, val);
  16.     else{
  17.         int mid = (l+r)/2;
  18.         add(2*id, l, mid, acum[id]);
  19.         add(2*id+1, mid+1, r, acum[id]);
  20.         acum[id] = 0;
  21.         f5(2*id, l, mid, x, y, val);
  22.         f5(2*id+1, mid+1, r, x, y, val);
  23.         st[id] = st[2*id] + st[2*id+1];
  24.     }
  25. }
  26.  
  27. ll query(int id, int l, int r, int x, int y){
  28.     if(l > y || r < x) return 0;
  29.     else if(x <= l && r <= y) return st[id];
  30.     else{
  31.         int mid = (l+r)/2;
  32.         add(2*id, l, mid, acum[id]);
  33.         add(2*id+1, mid+1, r, acum[id]);
  34.         acum[id] = 0;
  35.         return query(2*id, l, mid, x, y) + query(2*id+1, mid+1, r, x, y);
  36.     }
  37. }
  38. int main(){
  39.     int cases; scanf("%d", &cases);
  40.     while(cases--){
  41.         int n, c; scanf("%d %d", &n, &c);
  42.         memset(st, 0, sizeof st);
  43.         memset(acum, 0, sizeof acum);
  44.         while(c--){
  45.             int tipo, l, r; scanf("%d %d %d", &tipo, &l, &r);
  46.             if(!tipo){
  47.                 int val; scanf("%d", &val);
  48.                 f5(1, 0, n-1, l-1, r-1, val);
  49.             }else printf("%lld\n", query(1, 0, n-1, l-1, r-1));
  50.         }
  51.     }
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment