Girish_k_Goyal's blog

By Girish_k_Goyal, history, 24 hours ago, In English

Understanding Segment Trees


#include <bits/stdc++.h> using namespace std; class SegmentTree { private: vector<int> tree; int n; void build(const vector<int> &arr, int node, int start, int end) { if (start == end) { tree[node] = arr[start]; } else { int mid = (start + end) / 2; build(arr, 2 * node, start, mid); build(arr, 2 * node + 1, mid + 1, end); tree[node] = tree[2 * node] + tree[2 * node + 1]; } } int query(int node, int start, int end, int left, int right) { if (right < start || end < left) { return 0; } if (left <= start && end <= right) { return tree[node]; } int mid = (start + end) / 2; return query(2 * node, start, mid, left, right) + query(2 * node + 1, mid + 1, end, left, right); } void update(int node, int start, int end, int idx, int val) { if (start == end) { tree[node] = val; } else { int mid = (start + end) / 2; if (idx <= mid) { update(2 * node, start, mid, idx, val); } else { update(2 * node + 1, mid + 1, end, idx, val); } tree[node] = tree[2 * node] + tree[2 * node + 1]; } } public: SegmentTree(const vector<int> &arr) { n = arr.size(); tree.resize(4 * n); build(arr, 1, 0, n - 1); } int query(int left, int right) { return query(1, 0, n - 1, left, right); } void update(int idx, int val) { update(1, 0, n - 1, idx, val); } }; void solve() { vector<int> arr = {1, 3, 5, 7, 9, 11}; SegmentTree st(arr); cout << "Sum in range [1, 3]: " << st.query(1, 3) << "\n"; cout << "Sum in range [2, 5]: " << st.query(2, 5) << "\n"; st.update(2, 10); cout << "After updating index 2 to 10, sum in range [1, 3]: " << st.query(1, 3) << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; }

Summary

Operation Time Complexity
Build Tree O(n)
Query O(log n)
Update O(log n)
  • Vote: I like it
  • -12
  • Vote: I do not like it

»
2 hours ago, # |
  Vote: I like it +6 Vote: I do not like it

Providing code but not explaining how Segment Trees work does not build understanding

Please change the title to something like "My Segment Tree Template"

»
33 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

I don't get it why a person who have 5 week experience is learning about segment tree ???