Professional Documents
Culture Documents
Sparse Table
Sparse Table
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
0 0 0 0 0 0 0 0 i = 1, j = 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 0 0 0 0 0 0 0 i = 1, j = 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 0 0 0 0 0 0 i = 1, j = 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 0 0 0 0 0 i = 1, j = 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 0 0 0 0 i = 1, j = 3
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 0 0 0 i = 1, j = 4
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 0 0 i = 1, j = 5
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 1, j = 6
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 6
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 0
-5 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 1
-5 -5 0 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 2
-5 -5 1 0 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 3
-5 -5 1 1 0 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 2, j = 4
-5 -5 1 1 1 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 3, j = 4
-5 -5 1 1 1 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 3, j = 0
-5 -5 1 1 1 0 0 0
0 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3
-5 -5 5 1 1 3 3 0 i = 3, j = 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
n = |array| = 8
k = log2(n) = 3
st.resize(k+1)
st[0] = array
for i=1…k:
for j=0…n – 2i:
st[i][j] = min(st[i-1][j], st[i-1][j+2
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 3, r = 7
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = inf
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = inf
i = 3
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = inf
i = 3
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = inf
i = 2
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = inf
i = 2
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = inf
i = 2
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 2, r = 6
mn = 1
i = 2
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 6, r = 6
mn = 1
i = 2
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 6, r = 6
mn = 1
i = 1
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 6, r = 6
mn = 1
i = 1
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 6, r = 6
mn = 1
i = 0
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 6, r = 6
mn = 1
i = 0
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 6, r = 6
mn = 1
i = 0
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 7, r = 6
mn = 1
i = 0
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 7, r = 6
mn = 1
i = 0
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn
array 0 -5 10 5 1 3 21 3
st
0 -5 10 5 1 3 21 3 l = 7, r = 6
mn = 1
i = 0
-5 -5 5 1 1 3 3 0
-5 -5 1 1 1 0 0 0
-5 0 0 0 0 0 0 0
def getMin(l, r):
l, r = l – 1, r – 1
mn = inf
for i=k…0:
if 2i <= r – l + 1:
mn = min(mn, st[i]
l += 2i
return mn