edt1d = (grid, offset, stride, length) => {
v[0] = 0;
z[0] = -INF;
z[1] = INF;
for (let q = 0; q < length; q++) f[q] = grid[offset + q * stride];
for (let q = 1, k = 0, s = 0; q < length; q++) {
do {
const r = v[k];
s = (f[q] - f[r] + q * q - r * r) / (q - r) / 2;
} while (s <= z[k--]);
k += 2;
v[k] = q;
z[k] = s;
z[k + 1] = INF;
}
for (let q = 0, k = 0; q < length; q++) {
while (z[k + 1] < q) k++;
const r = v[k];
grid[offset + q * stride] = f[r] + (q - r) * (q - r);
}
}