Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.62 KB | None | 0 0
  1. template <class T>
  2. class SegmentTree {
  3. const int n;
  4. vector<T> data;
  5. T sub(int l, int r, int node, int lb, int ub) const {
  6. if (ub <= l || r <= lb) return T();
  7. if (l <= lb && ub <= r) return data[node];
  8. T vl = sub(l, r, node * 2 + 0, lb, (lb + ub) / 2);
  9. T vr = sub(l, r, node * 2 + 1, (lb + ub) / 2, ub);
  10. return merge(vl, vr);
  11. }
  12. public:
  13. SegmentTree(const int s) : n(1 << s), data(n * 2, T()) {}
  14. void update(int p, T val) {
  15. data[p += n] = val;
  16. while (p /= 2) {
  17. data[p] = merge(data[p * 2], data[p * 2 + 1]);
  18. }
  19. }
  20. T query(int l, int r) const {
  21. return sub(l, r, 1, 0, n);
  22. }
  23. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement