解説
変更クエリなしで解くことから考えてみましょう。
dp[i] := i番目までみたときのとの組み合わせ
とすると、との各桁の和はせいぜいであることから、2桁のみ考えたらいいことがわかります。
よって、s[i]となる組み合わせを、s[i-1]s[i]の2桁となる組み合わせをとすると
です。
これをよく見てみると、
となり、行列の演算になっています。
これはセグ木に乗るので、各クエリに対してこの問題は解けました。
定数倍のコツとして、セグ木に行列のを乗せる際はstd::vector
よりもstd::array
のほうがいいです。
全体取得なので、一番上のところだけみるようにするのもいいです。