Изменения

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

Convex hull trick

22 байта добавлено, 19:19, 23 ноября 2016
Р.Реализация
sz = 1 // текущий размер выпуклой оболочки
pos = 0 // текущая позиция первго такого j, что x[i] >= front[st[j]]
for i = 1..n-1 { while (front[pos] < x[i]) ++pos
j = st[pos]
dp[i] = K[j] * a[i] + B[j]
st[sz] = i
from[sz++] = x
}
(Здесь функция divide(a, b) возвращает нужное округление a / b)
Такая реализация будет работать за O(n).
Анонимный участник

Навигация