概要
制約 1 の取り扱いが、少し別解っぽかったので書いておきます。
公式解説補足
関連:https://judge.yosupo.jp/problem/pow_of_formal_power_series_sparse
これをさらに高速化することが求められています。
解法(制約 1)
クエリ総数を
上述の係数間の漸化式を行列で書き表すことで、次に帰着できます:
適当なバケットサイズ
- 区間積
を計算する。ただし積は について降順。計算結果は 次多項式を成分とする 行列。 - 区間積
を計算する。(やはり について降順) を満たすクエリ に対して、2. の区間積を で評価したもの を計算する。 を満たすクエリ に対して答を計算する。
それぞれの方法と計算量を確認します。
- は
次式 個の総積で、分割統治と畳み込みを利用して 時間でできることがよく知られていると思います(関連:https://judge.yosupo.jp/problem/product_of_polynomial_sequence)。すべての にわたる計算量の合計は 時間です。 - は、1. の結果を順番に畳み込むことで行います。畳み込みが
時間、これを 回行うため、 にわたる和は 時間です。 - は、2. の結果を成分ごとに多点評価することで得られます。バケット内のクエリの個数を
として、 時間。バケットに関する総和は 時間です。なお、以下に述べるように、最終的にはこの行列に をかけたものだけが必要なので、多点評価を行う成分は つだけでよいです。 - は、3. で計算した
に対してさらに の順に左から行列 をかけることで行います。行列行列積ではなく行列ベクトル積を反復する方が定数倍がよいです。バケット内のクエリの個数を として、 時間。バケットに関する総和は 時間です。