A Sparse Table maintains an array of numbers by maintaining
which costs a space of .
Initialize
Initialize is an algorithm that initializes the Sparse Table with in time and space.
Lemma
Applying the lemma yields an algorithm that solves the problem in time and space.
f[0] = a;
for (int i = 1; i <= std::__lg(n); i++) {
for (int j = 0; j + (1 << i) <= n; j++) {
f[i][j] = std::max(f[i - 1][j], f[i - 1][j + (1 << (i - 1))]);
}
}Range Maximum Query
Range Maximum Query is an algorithm that computes in time and space.
Lemma
Applying the lemma yields an algorithm that solves the problem in time and space.
int i = std::__lg(r - l);
return std::max(f[i][l], f[i][r - (1 << i)]);