This documentation is automatically generated by online-judge-tools/verification-helper
$N$ 行 $M$ 列の行列 $A = (a_{i,j})$ が Monotone であるとは,
\[\min \left(\operatorname*{argmin}_{0 \leq j < M} a_{0,j} \right) \leq \min \left(\operatorname*{argmin}_{0 \leq j < M} a_{1,j} \right) \leq \dots \leq \min \left(\operatorname*{argmin}_{0 \leq j < M} a_{N-1,j} \right)\]を満たすことである.
このとき, $0 \leq i < N$ それぞれに対する
\[\min \left(\operatorname*{argmin}_{0 \leq j < M} a_{i,j} \right)\]を合計で $O(N + M \log N)$ 時間で求める.
Monotone_Minima(N: int, M: int, eval: Callable[[int, int], int]) -> list[int]
def Monotone_Minima(N: int, M: int, eval) -> list[int]:
""" N 行 M 列の行列 A の第 (i, j) 要素が eval(i, j) であり, 以下の単調性を満たすとする.
f(i) := min argmin_{j} A(i, j) としたとき, f(0) <= f(1) <= ... <= f(M - 1) が成り立つ.
このとき, 0 <= i < N に対して, f(i) を求める.
Args:
N (int): 行の数
M (int): 列の数
eval (Callable[[int, int], int]): 第 (i, j) 要素が eval(i, j) になる.
Returns:
list[int]: 第 i 要素が f(i) である長さ N のリスト
"""
res = [-1] * N
stack = [(0, N, 0, M)]
while stack:
u, d, l, r = stack.pop()
if d - u < 1:
continue
i = (u + d) // 2
j = min(range(l, r), key = lambda j: eval(i, j))
res[i] = j
stack.append((u, i, l, j + 1))
stack.append((i + 1, d, j, r))
return res
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/onlinejudge_verify/languages/python.py", line 96, in bundle
raise NotImplementedError
NotImplementedError