Range minimum query
‘Range minimum query’ is a well-known problem that can be solved using the segment tree. In this article, we will see how to solve such query problems efficiently using a segment tree.
Segment tree is a special kind of data structure that is used to store information about intervals or segments of an array. Let’s see its representation.
Representation of segment tree
- The segment tree is represented as an array just like a heap. For a node of the segment tree at index i of the segment tree, its left child will be at index 2*i + 1, and its right child will be at index 2*i+2.
- The leaf nodes of the segment tree are the elements of the input array whose information about intervals we are storing.
- Each internal node of the tree is merging its child nodes. The method of merging depends on the problem. For the ‘range minimum query’, problem merging is the minimum of its child nodes.
You are given an array of integers, given m numbers of queries of range (specified by indices of the array). You need to return minimum elements for each given range.
n=5 (size of array)
m=3 (numbers of queries)
For 1st query min(1,2,3,4,5)=1;
2nd query min(1,2,3,4)=1;
3rd query min(3,4,5)=3
Brute Force approach
The brute force approach is for each query to run a loop in the given range and find the minimum in that range.
So, for m, such queries on an array of size n, the time complexity will be O(m*log n) in the worst case.
Segment Tree-based approach
Step 1: construction of segment tree of the given array
Initially, we start with the given array arr[0 . . . n-1] as the initial segment. In each step, we divide the current segment into two halves(until it becomes a segment of length equal to 1), and then call the same procedure on both halves, and for each segment, we store the minimum value of the segment in a segment tree node.
The segment tree will be a full binary tree as we always divide segments into two halves at every level. As the constructed tree is a full binary tree with n leaves(i.e., elements of the input array), there will be n-1 internal nodes. So, the total number of nodes in the segment tree will be 2*n – 1.
The time complexity for constructing the segment tree is O(n) as there are 2*n-1 nodes whose value is calculated only once.
Step 2: querying for the minimum value of the given range
We will now follow an algorithm to find the minimum of a given range from the segment tree.
|// function for answering each query|
query(int idx,int l,int r)
if the segment of node at idx is part of
the given range
if the segment of node at idx is outside of the given range
if the given range overlaps with segment of the node
left=query(2*idx+1,l,r); // min of left half of the given range
right=query(2*idx+2,l,r); // min of right half of the given range
// c++ code for range minimum query problem
The time complexity for the above algorithm for each query is O(log n) where n is the size of the given array as the number of levels in the segment tree is O(log n).
Here space complexity is O(n) as we are using extra space for constructing the segment tree with (2*n - 1) nodes.
- What is a segment tree?
Segment tree is a special kind of data structure that is used to store information about intervals or segments of an array. It is represented by an array.
- Is a segment tree a binary tree?
As for each parent node, there are at most two child nodes; segment tree is a binary tree.
- Is it a complete tree or a full tree?
The segment tree is a full binary tree as we always divide segments of the given array into halves at every level.
- What is the difference between segment tree and heap?
Heap is a complete binary tree, but the segment tree is a full binary tree. Their use cases are also different.
- In what kind of problem segment tree is used?
→ To solve min, max, or sum queries of a given range on an array.
→ Here we have discussed the range minimum query problem.
This article covered the range minimum query problem. We have learned about the application of the segment tree to solve problems like the range minimum query problem.
Apart from this, you can practice a wide range of coding questions commonly asked in interviews in CodeStudio. Along with coding questions, we can also find the interview experience of scholars working in renowned product-based companies here.