We have an array arr. We need to find the sum of all the elements in the range L and R where 0 <= L <= R <= n-1. Consider a situation when there are many range queries.
Input : 3 7 2 5 8 9 query(0, 5) query(3, 5) query(2, 4) Output : 34 22 15 Note : array is 0 based indexed and queries too.
Since there are no updates/modifications, we use Sparse table to answer queries efficiently. In sparse table, we break queries in powers of 2.
Suppose we are asked to compute sum of elements from arr[i] to arr[i+12]. We do the following: // Use sum of 8 (or 23) elements table[i] = sum(arr[i], arr[i + 1], ... arr[i + 7]). // Use sum of 4 elements table[i+8] = sum(arr[i+8], arr[i+9], .. arr[i+11]). // Use sum of single element table[i + 12] = sum(arr[i + 12]). Our result is sum of above values.
Notice that it took only 4 actions to compute result over subarray of size 13.
34 22 15
This algorithm for answering queries with Sparse Table works in O(k), which is O(log(n)), because we choose minimal k such that 2^k+1 > n.
Time complexity of sparse table construction : Outer loop runs in O(k), inner loop runs in O(n). Thus, in total we get O(n * k) = O(n * log(n))
- Range maximum query using Sparse Table
- Range Minimum Query (Square Root Decomposition and Sparse Table)
- Sparse Table
- Range query for count of set bits
- Range query for Largest Sum Contiguous Subarray
- Number of prefix sum prime in given range query
- Range and Update Query for Chessboard Pieces
- Multiplication on Array : Range update query in O(1)
- Difference Array | Range update query in O(1)
- Segment Tree | Set 2 (Range Minimum Query)
- Query to check if a range is made up of consecutive elements
- Iterative Segment Tree (Range Minimum Query)
- Segment Tree | Set 2 (Range Maximum Query with Node Update)
- Iterative Segment Tree (Range Maximum Query with Node Update)
- Range Query on array whose each element is XOR of index value and previous element
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.