D - XXOR Editorial by Mitsubachi


再帰関数でも解けます。 $g \left( k \right)$ を $\max \left( f \left( 0 \right), f \left( 1 \right), \cdots, f \left( k \right) \right)$ として $g \left( K \right)$ を求めたいです。
あらかじめ $2^i$ の bit が立っている $A_j$ の数を全ての $i$ について求めておきます。この値を $c_i$ とします。 $O \left( N \log A \right)$ でこれは求まります。

$k = 0$ のとき $g$ は $A_i$ の総和で、これは $O \left( N \right)$ で求められます。
$k > 0$ において $2^d \leq k < 2^{d+1}$ なる非負整数 $d$ が存在します。ここで $[0, k]$ は $[0, 2^d-1]$ と $[2^d, k]$ の和として表されます。
$[0, 2^d-1]$ における $f$ の最大値は $g \left( 2^d-1 \right)$ です。 $[2^d, k]$ における $f$ の最大値は $g \left( k - 2^d \right) + 2^d \left( N - 2 c_d \right)$ です。後者は $2^d$ の bit の寄与を考えると導かれます。

\(g\) をメモ化再帰して上の遷移を実装することで全体として \(O \left( N \log A \right)\) で解けます。

posted:
last update: