競技プログラミング用 知識集積所

ABC417F - Random Gathering

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

期待値と平均は、意味こそ違えど計算はほぼ同じ。
つまり、やっていることはただ範囲内を全部平均化しているだけである。

この場合、同じデータが大量に並ぶことになるので、set(未作成)上でランレングス圧縮(未作成)っぽい構造を使うことで高速化できる。
すなわち、tuple(未作成)で例えば{3,5,10}だったら、「3番目から5番目までは10」という意味にして、set(未作成)に詰め込んでおく。

操作ごとに、
をやればよい。

一度でも参照されたデータはset(未作成)から消え、戻すのは毎回最大3個なので、計算量はO( (N+Q)log(N+Q) )(……たぶん)で、十分間に合う。

答えは998244353で割った余りを要求されているので、剰余類換(未作成)の考えに従って処理する。
何か足し算や掛け算をするたびに結果を%998244353し、割り算は代わりに998244353-2乗したものを掛ける。
累乗計算を何度も行うため、繰り返し二乗法(未作成)のアルゴリズムも用意しておくこと。

解答例


注意点


別解

lazy regment木(未作成)でも解けるらしい。

後で書く。
ウィキ募集バナー