AtCoder Beginner Contest 276 F問題 Double Chance
問題
提出解答
問題の概要
整数列 がある. それぞれに対して以下の問に答えよ.
確率変数 をそれぞれ から一様ランダムに決定する (重複がある場合はその分だけ 2倍, 3倍になる). このとき, の期待値を求めよ.
制約
解法1
まず, を固定して考える. を昇順に並び替えた列を とする. まず, これらが全て相異る場合, 期待値 は,
である. ここで, とし, を高速に求める方法を考えることにする.
解放2
である. を昇順に並び替えた列を とし, この中に 未満の整数が 個あるとする *1.
このとき,
であるから, の値及び, にある 以上の整数の総和を高速に求められれば良い. これらは共に Binary Indexed Tree を用いることによって, 時間で求めることが出来る.
以上から, をそれぞれ 時間, 合計で 時間で求められることができるので, によって, を 時間で求めることができた.
*1:大雑把に言うと, を満たす整数 のこと ( のときに が存在しないため)