leetcode

Solution to some Leetcode problems written in C++
git clone git://git.dimitrijedobrota.com/leetcode.git
Log | Files | Refs | README | LICENSE

segment_tree.cpp (619B)


0 class SegmentTree {
1 const int n;
2 vector<int> t = vector<int>(2 * n);
4 public:
5 SegmentTree(const vector<int> nums): n(size(nums)) {
6 for (int i = 0; i < n; i++) t[n + i] = nums[i];
7 for (int i = n - 1; i > 0; i--) t[i] = t[i * 2] + t[i * 2 + 1];
8 }
10 int sum(int l, int r) const {
11 int res = 0;
13 for (l += n, r += n; l < r; l /= 2, r /= 2) {
14 if (l & 1) res += t[l++];
15 if (r & 1) res += t[--r];
16 }
18 return res;
19 }
21 void update(int p, int val) {
22 for (t[p += n] = val; p > 1; p /= 2) t[p / 2] = t[p] + t[p ^ 1];
23 }
24 };