E - Or Plus Max 解説
by
Mitsubachi
長さ \(2^X\) の数列 \(Y\) について \(f(Y)\) をこの問題の答えとなる数列の先頭に \(0\) をつけた長さ \(2^X\) の数列とします.以降,0-indexed で考えます.
\(X = 1\) のとき,\(f(Y) = (0, Y_0 + Y_1)\) です.\(X \geq 2\) として,長さ \(2^{X - 1}\) の数列 \(B, C\) を \(B_i = Y_i, C_i = \max(Y_i, Y_{2^{X - 1} + i})\) として定めます.
\(f(Y)\) の前半分は \(f(B)\) です.後半分について,\(f(Y)_{2^{X-1}+i} = \max(f(Y)_{2^{X-1}+i-1}, f(C)_i, Y_i + Y_{2^{X-1}+i})\) です.
よって,長さ \(2^X\) の数列について \(f\) を求めることは長さ \(2^{X -1}\) の数列 \(2\) つについて \(f\) を求めることに帰着できます.
したがって,\(O(N 2^N)\) でこの問題が解けます.
投稿日時:
最終更新:
