1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| BIT2 B1, B2, B3, B4;
inline void upd(int x, int y, ll k) { B1.add(x, y, k); B2.add(x, y, x * k); B3.add(x, y, y * k); B4.add(x, y, x * y * k); }
inline ll que(int x, int y) { return B1.query(x, y) * (x + 1) * (y + 1) - B2.query(x, y) * (y + 1) - B3.query(x, y) * (x + 1) + B4.query(x, y); }
inline void add(int a, int b, int c, int d, ll x) { upd(a, b, x); upd(c + 1, d + 1, x); upd(c + 1, b, -x); upd(a, d + 1, -x); }
inline ll query(int a, int b, int c, int d) { return que(c, d) - que(a - 1, d) - que(c, b - 1) + que(a - 1, b - 1); }
|