1.
Introduction
2.
Problem statement
3.
Approach
4.
Code
5.
Complexity analysis
6.
FAQs
7.
Key Takeaways
Last Updated: Mar 27, 2024

# Sparse Table Construction (SUM QRY)

Malay Gain
1 upvote
Roadmap to SDE career at Amazon
Speaker
Anubhav Sinha
SDE-2 @
25 Jun, 2024 @ 01:30 PM

## Introduction

Sparse Table is a special kind of datastructure to answer range queries on an array efficiently. But there is a limitation as the sparse table can be used only on static data set i.e. array should not be updated between two queries. As the title of this article suggests we will discuss the construction of sparse table in the context of sum query.

Here first, we will first describe how the sparse table is represented and then we will solve the range sum query problem using the sparse table.

Recommended Topic, Array Implementation of Queue and  Rabin Karp Algorithm

## Problem statement

There is an array of integers. You are given some queries of ranges. For each query, you need to find the sum of the integers of the range from the given array.

Input

``````arr[ ] = { 2, 4, 3, 5, 7, 9 }
range=[0,2]``````

Output

``9``

Explanation

``Range sum = 2+4+3= 9``

Note: Please try to solve the problem first and then see the below solution approach.

Get the tech career you deserve, faster!
Connect with our expert counsellors to understand how to hack your way to success
User rating 4.7/5
1:1 doubt support
95% placement record
Akash Pal
Senior Software Engineer
326% Hike After Job Bootcamp
Himanshu Gusain
Programmer Analyst
32 LPA After Job Bootcamp
After Job
Bootcamp

## Approach

As the title of this article itself suggests we will be using the concept of sparse table to solve the problem. Letâ€™s first see how a sparse table is constructed from a given array.

Construction of Sparse Table

The main intuition behind sparse table representation comes from the binary representation of an integer. As any integer can have its unique binary representation, it can be expressed as the sum of powers of 2. So, any interval or range can be expressed as the sum of decreasing powers of 2.

We will precompute the sum of the ranges having the length of power of 2 from each index of the given array. To answer queries efficiently we will use these precomputed values.

To store these precomputed values we will use a 2D array known as the sparse table of size n*(k+1) where n is the length of the given array and k=logn (of base 2).

For any sparse table st, st[i][j] will store the sum of the range [ i to  i+2j-1] that is of length 2j.

range [i,  i+2j-1] can be broken into two ranges [i, i+2j-1-1] and [ i+2j-1,  i+2j-1] of length  2j-1.So, st[i][j] can be expressed as

st[ i][ j] = st[ i ][ j-1] + st[ i+2j-1] [  j-1]

``````//constructing the sparse table.
int st[n][k+1];

for(int i=0;i<n;i++)
{
st[i][0]=arr[i];
}

for(int j=1;j<=k;j++)
{
for(int i=0;i<n;i++)
{
st[i][j] = st[i][j-1] + st[ i+1<<(j-1)][j-1];
}
}``````

For answering the given range sum query [l,r] we will try to split the range into lengths of powers of 2 starting from the largest possible value k. If the first split is the range [l, l+2j-1] i.e. st[ l, j], we will try to split the remaining range [l+2j, r] in the same way.

``````//answering range sum query (l,r)
int    query(int l,int r)
{
int sum=0;

for(int j=k;j>=0;j--)
{
if((1<<j)<=r-l+1)
{
sum+=st[l][j];
l+=1<<j;
}
}
return sum;
}    ``````

## Code

``````//C++ implementation of constrcuting Sparse Table

#include<bits/stdc++.h>
using namespace std;

//driver code

int main()
{
int n=6;
int arr[] = { 2, 4, 3, 5, 7, 9 };

//constructing Sparse Table
int k=log(n)/log(2);

int st[n][k+1];

for(int i=0;i<n;i++)
{
st[i][0]=arr[i];
}

for(int j=1;j<=k;j++)
{
for(int i=0;i<n;i++)
{
st[i][j] = st[i][j-1] + st[ i+1<<(j-1)][j-1];
}
}

int l=0,r=2;

int sum=0;

for(int j=k;j>=0;j--)
{
if((1<<j)<=r-l+1)
{
sum+=st[l][j];
l+=1<<j;
}
}

cout<<"Range sum for the given query: " << sum;
}``````

Output

``Range sum for the given query: 9``

## Complexity analysis

The Time Complexity of constructing a sparse table is O(n*k) â‰… O(n*logn) and answering a single query takes O(k)â‰… O(logn) where n is the size of the given array.

Space complexity is O(n*logn).

## FAQs

1. What is the Sparse Table?
Sparse Table is a special kind of data structure to answer range queries on an array efficiently. It is implemented as a 2d array.

2. In which type of problem Sparse Table can be used?
To perform range queries on any static data set, the sparse table is used.

## Key Takeaways

This article covered the construction of a sparse table and how to solve the range sum queries using the sparse table.