qwerty787788

Untitled

Jul 14th, 2014
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.89 KB | None | 0 0
  1. class ST2 {
  2.         long[] a;
  3.         long[] s;
  4.         int n;
  5.  
  6.         ST2(int n) {
  7.             this.n = n;
  8.             a = new long[n * 4];
  9.             s = new long[n * 4];
  10.         }
  11.  
  12.         long get(int v, int l, int r, int needL, int needR) {
  13.             if (needR < needL)
  14.                 return 0;
  15.             if (l == needL && r == needR)
  16.                 return s[v];
  17.             int m = (l + r) >> 1;
  18.             return a[v] * 1L * (needR - needL + 1)
  19.                     + get(v * 2 + 1, l, m, needL, Math.min(needR, m))
  20.                     + get(v * 2 + 2, m + 1, r, Math.max(m + 1, needL), needR);
  21.         }
  22.  
  23.         void add(int v, int l, int r, int needL, int needR, int val) {
  24.             if (needR < needL)
  25.                 return;
  26.             if (l == needL && r == needR) {
  27.                 a[v] += val;
  28.                 s[v] += (r - l + 1) * 1L * val;
  29.                 return;
  30.             }
  31.             int m = (l + r) >> 1;
  32.             add(v * 2 + 1, l, m, needL, Math.min(needR, m), val);
  33.             add(v * 2 + 2, m + 1, r, Math.max(needL, m + 1), needR, val);
  34.             s[v] = s[v * 2 + 1] + s[v * 2 + 2] + a[v] * (r - l + 1);
  35.         }
  36.     }
Advertisement
Add Comment
Please, Sign In to add comment