解説
まず、誰も入ろうとしていないスタジアムにおいて、求める確率は 1 です。
また、各プレイヤー i について、入ろうとしているスタジアムのうちスタジアム k に入らない確率は独立に
- k が li,li+1,...,ri に含まれているとき ri−li+1ri−li+1−1=ri−li+1ri−li
- 含まれていないとき 1
であることから、各スタジアムにおける確率を管理する配列(初めは全て 1)を P として、各 i について [li,ri+1) の範囲で ri−li+1ri−li を乗算すればよいことになります。
この操作は遅延セグメント木を利用することで操作1回当たり O(logM) で可能であるため、全体としても O((N+M)logM) で動作します。これは本制約下で十分高速です。よって、この問題を解くことができました。
追記
遅延セグメント木の代わりにimos法を用いても解くことができます。(累積積) こちらは
O(N+M) で動作し、さらに高速化が望めます。
具体的には、 最初配列を a=(1,1,...,1) としておき、ali に ri−li+1ri−li を乗算し、ari+1 に ri−li+1ri−li を除算するという操作を
各 i(1≤i≤N) について行い、最後にimos法の要領で各 i ごとに ∏j=1ij を求めその答えを出力すればよいです。
しかし、一つ問題が生じます。それは、 li=ri となる場合があることです。li=ri となる場合、ali に 0 を乗算し、
ari+1 に 0 を除算することになってしまいます。そこで、0除算を回避するために、次のようにします。
- li<ri のとき、ali に ri−li+1ri−li を乗算し、ari+1 に ri−li+1ri−li を除算する。
- li=ri のとき、li の値を集合 B に入れておく。
- 最後の計算の際、i が B に含まれているならば、答えの代わりに 0 を出力する。
このようにすることで0除算を回避しつつ、正しく答えを出力できます。時間計算量は O(N+M) です。