MCPcopy Create free account
hub / github.com/LeadCoding/3-weeks-Google-Prep / SegmentTree

Class SegmentTree

03. SegmentTree/1. SegmentTreeSnippetClass.cpp:4–68  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2using namespace std;
3
4class SegmentTree {
5private:
6 int siz;
7
8
9 void buildSegmentTree(int startOfRange, int endOfRange, int indexOfSegmentTree, vector<int>&v) {
10 if(startOfRange == endOfRange) {
11 segmentTreeArray[indexOfSegmentTree] = v[startOfRange];
12 return;
13 }
14 int mid = (startOfRange + endOfRange)/2;
15
16 buildSegmentTree(startOfRange, mid, indexOfSegmentTree*2 + 1, v);
17 buildSegmentTree(mid + 1, endOfRange, indexOfSegmentTree*2 + 2,v);
18
19 segmentTreeArray[indexOfSegmentTree] = segmentTreeArray[indexOfSegmentTree*2 + 1] + segmentTreeArray[indexOfSegmentTree*2 + 2];
20 }
21
22 int query(int startOfRange, int endOfRange, int indexOfSegmentTree, int l, int r) {
23 if(endOfRange < l || startOfRange > r) {
24 return 0;
25 }
26
27 if(startOfRange >= l && endOfRange <= r) {
28 return segmentTreeArray[indexOfSegmentTree];
29 }
30
31 int mid = (startOfRange + endOfRange)/2;
32 int leftSide = query(startOfRange, mid, indexOfSegmentTree*2 + 1, l, r);
33 int rightSide = query(mid+1, endOfRange, indexOfSegmentTree*2 + 2, l, r);
34 return leftSide + rightSide;
35
36 }
37
38 void update(int startOfRange, int endOfRange, int indexOfSegmentTree, int index, int val) {
39 if(startOfRange == endOfRange) {
40 segmentTreeArray[indexOfSegmentTree] = val;
41 return;
42 }
43 int mid = (startOfRange + endOfRange)/2;
44 if(mid >= index) {
45 update(startOfRange, mid, indexOfSegmentTree*2 + 1, index, val);
46 } else {
47 update(mid + 1, endOfRange, indexOfSegmentTree*2 + 2, index, val);
48 }
49 segmentTreeArray[indexOfSegmentTree] = segmentTreeArray[indexOfSegmentTree*2 +1] + segmentTreeArray[indexOfSegmentTree*2 +2];
50 }
51public:
52 vector<int> segmentTreeArray;
53 SegmentTree(int siz):siz(siz) {
54 segmentTreeArray.resize(siz*4);
55 }
56
57 void buildSegmentTree(vector<int>&v) {
58 buildSegmentTree(0, siz - 1, 0, v);
59 }
60
61 int query(int l, int r) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected