Изменения

Перейти к: навигация, поиск

Алгоритм Фарака-Колтона и Бендера

84 байта убрано, 23:55, 1 апреля 2016
Псевдокод
'''else'''
ST[i][j] = ST[i][j - 1]
<font color=green>// Посчитаем хеш тип для каждого блока {{---}} он будет являться типом блока</font>
'''for''' i = 0 '''to''' K - 1
hashtype[i] = 0
cur_block = 0
j = 0
cur_block++
'''if''' j > 0 '''and''' (i <tex>\geqslant</tex> N '''or''' A[i - 1] < A[i])
hashtype[cur_block] += (1 << (j - 1))
i++
j++
block_min[i][l][r] = -1
'''for''' i = 0 '''to''' K - 1
t = type = hash[i] '''if''' block_min[typet][0][0] = -1 <font color=green>// если там записано, что-то отличное от -1, то значит, мы уже посчитали ответ для такого типа отрезков</font>
'''for''' l = 0 '''to''' block_size - 1
block_min[typet][l][l] = l
'''for''' r = l + 1 '''to''' block_size - 1
block_min[typet][l][r] = block_min[typet][l][r - 1] '''if''' i * block_size + r <tex>\leqslant </tex> N '''and''' A[i * block_size + block_min[typet][l][r]] > A[i * block_size + r] block_min[typet][l][r] = r
'''function''' block_RMQ(block_number: '''int''', l: '''int''', r: '''int'''): '''int'''
'''return''' block_min[hashtype[block_number]][l][r] + block_number * block_size
'''function''' RMQ(l: '''int''', r: '''int'''): '''int'''
Анонимный участник

Навигация