Skip to content

Instantly share code, notes, and snippets.

@amanharitsh123
Created June 9, 2020 14:12
Show Gist options
  • Save amanharitsh123/c486b8e3761e621cce5489875b4ff69a to your computer and use it in GitHub Desktop.
Save amanharitsh123/c486b8e3761e621cce5489875b4ff69a to your computer and use it in GitHub Desktop.
Max segment tree in c++
class seg_tree {
public:
vector<int> arr;
vector<int> tree;
int n;
seg_tree(vector<int> x) {
n = x.size();
arr = x;
tree.resize(4*n);
build(0, 0, arr.size()-1);
}
int build(int node, int l, int r) {
if(l>r)
return 0;
if(l==r) {
tree[node] = arr[l];
return tree[node];
}
int mid = (l+r)/2;
int left = build(2*node+1, l, mid);
int right = build(2*node+2, mid+1, r);
tree[node] = max(left, right);
return tree[node];
}
int query(int node, int x, int y, int l, int r) {
if(l>y or r<x or l>r)
return -inf;
if(l<=x and y<=r)
return tree[node];
int mid = (x+y)/2;
return max(query(2*node+1, x, mid, l, r), query(2*node+2, mid+1, y, l, r));
}
int q(int l, int r) {
return query(0, 0, arr.size()-1, l, r);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment