PloadyFree

Fenwick range update

Oct 28th, 2017
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.98 KB | None | 0 0
  1.     class Tree {
  2.         long[] dataMul;
  3.         long[] dataAdd;
  4.  
  5.         Tree(int n) {
  6.             dataMul = new long[n + 1];
  7.             dataAdd = new long[n + 1];
  8.         }
  9.  
  10.         void update(int left, int right, long by) {
  11.             internalUpdate(left, by, -by * (left - 1));
  12.             internalUpdate(right, -by, by * right);
  13.         }
  14.  
  15.         void internalUpdate(int at, long mul, long add) {
  16.             for (at++; at < dataMul.length; at += at & -at) {
  17.                 dataMul[at] += mul;
  18.                 dataAdd[at] += add;
  19.             }
  20.         }
  21.  
  22.         long query(int at) {
  23.             long mul = 0;
  24.             long add = 0;
  25.             int start = at;
  26.             for (at++; at > 0; at -= at & -at) {
  27.                 mul += dataMul[at];
  28.                 add += dataAdd[at];
  29.             }
  30.             return mul * start + add;
  31.         }
  32.  
  33.         long query(int left, int right) {
  34.             return query(right) - query(left - 1);
  35.         }
  36.     }
Advertisement
Add Comment
Please, Sign In to add comment