P12407 「CZOI-R3」数字变换

题目描述

你有一个长度为 $n$ 的序列 $x$ 和一个数 $a=p$。 序列 $x$ 的第 $i$ 个数具有一个花费序列 $w_{i,1},w_{i,2},\dots,w_{i,k}$。 你可以将 $a$ 变换成 $i$($1\le i\le n$,$a$ 可以等于 $i$),**当前**是你的第 $j$ 次操作,则花费为 $w_{i,j} + 2\times(L-(x_a \mathbin{\&} x_i))$,其中 $\mathbin{\&}$ 是按位与,即 C++ 中的 `&`。 $L$ 是序列 $x$ 中所有数的最大值,即 $\max\limits_{1\le i\le n}x_i$。 你需要对所有 $1\le i\le n$ 求出**在第 $k$ 步操作结束时**将 $a$ 变成 $i$ 的**最小**花费。询问之间互相独立,每次询问不会影响其他次询问的答案。

输入格式

输出格式

说明/提示

**【样例解释】** $x = \{3, 1, 3\},w_1 = \{834731, 259456\},w_2 = \{471501, 271389\} ,w_3 = \{902700, 566748\},a=1,L=3$。 将 $a$ 变为 $2$ 的最优操作是第一次 $a\to 2$ 花费 $w_{2,1} + 2\times(3-3\& 1)= 471505$,第二次 $a\to 2$ 花费 $w_{2,2} + 2\times(3-1\& 1)= 271393$,总花费为 $742898$。 **【数据范围】** - Subtask #1($15\text{ pts}$):$k = 1$,$x_i < 2^{12}$。 - Subtask #2($25\text{ pts}$):$c\le 10^3$(最多只有 $10^3$ 种不同的 $x_i$),$x_i < 2^{12}$。 - Subtask #3($25\text{ pts}$):$\max\{\text{popcount}(x_i)\} \le 5$。其中 $\text{popcount}(x_i)$ 表示 $x_i$ 在二进制下 $1$ 的个数。 - Subtask #4($35\text{ pts}$):无特殊限制。 对于 $100\%$ 的数据,$1 \le n \le 2 \times 10^5$,$1 \le k \le 10$,$0\le x_i