You are on page 1of 40

array 0 -5 10 5 1 3 21 3

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

You might also like