Min-Plus Convolution

第1引数が凸列である場合のmin-plus convolutionを計算します。

長さnの列convexと長さmの列arbitraryに対し、 長さn + m - 1の列resultを返します。

各indexkについて、範囲内のiを用いて次を計算します。

result[k] = min(convex[k - i] + arbitrary[i])

一般形

minPlusConvolutionConvexArbitrary(
  convex: openArray[int64],
  arbitrary: openArray[int64],
): seq[int64]

引数

両方の入力列は変更されません。

返り値

どちらかの入力が空の場合は空列を返します。

例外

convexが凸列でない場合はValueErrorを送出します。

制約

計算量

n = convex.len、m = arbitrary.lenとします。

現在のdivide-and-conquer monotone optimization実装では、

です。

使用例

import atcoder/extra/math/min_plus_convolutionlet convex =  @[0'i64, 1, 4]let arbitrary =  @[3'i64, 0]doAssert minPlusConvolutionConvexArbitrary(  convex,  arbitrary,) == @[3'i64, 0, 1, 4]

import方法

import atcoder/extra/math/min_plus_convolution

主なAPI