No contest Total Champion!

2 secs 1024 MB
programgmg2's icon programgmg2

解説

まず、誰も入ろうとしていないスタジアムにおいて、求める確率は 11 です。 また、各プレイヤー ii について、入ろうとしているスタジアムのうちスタジアム kk に入らない確率は独立に

  • kkli,li+1,...,ril_i,l_i+1,...,r_i に含まれているとき rili+11rili+1=rilirili+1\displaystyle \frac{r_i-l_i+1-1}{r_i-l_i+1} = \frac{r_i-l_i}{r_i-l_i+1}
  • 含まれていないとき 11

であることから、各スタジアムにおける確率を管理する配列(初めは全て 11)を PP として、各 ii について [li,ri+1)[l_i,r_i+1) の範囲で rilirili+1\frac{r_i-l_i}{r_i-l_i+1} を乗算すればよいことになります。

この操作は遅延セグメント木を利用することで操作1回当たり O(logM)O(logM) で可能であるため、全体としても O((N+M)logM)O((N+M)logM) で動作します。これは本制約下で十分高速です。よって、この問題を解くことができました。

追記

遅延セグメント木の代わりにimos法を用いても解くことができます。(累積積) こちらは O(N+M)O(N+M) で動作し、さらに高速化が望めます。

具体的には、 最初配列を a=(1,1,...,1)a = (1,1,...,1) としておき、alia_{l_i}rilirili+1\frac{r_i-l_i}{r_i-l_i+1} を乗算し、ari+1a_{r_i+1}rilirili+1\frac{r_i-l_i}{r_i-l_i+1} を除算するという操作を 各 i(1iN)i(1 \leq i \leq N) について行い、最後にimos法の要領で各 ii ごとに j=1ij\prod_{j=1}^{i} j を求めその答えを出力すればよいです。

しかし、一つ問題が生じます。それは、 li=ril_i = r_i となる場合があることです。li=ril_i = r_i となる場合、alia_{l_i}00 を乗算し、 ari+1a_{r_i+1}00 を除算することになってしまいます。そこで、0除算を回避するために、次のようにします。

  • li<ril_i < r_i のとき、alia_{l_i}rilirili+1\frac{r_i-l_i}{r_i-l_i+1} を乗算し、ari+1a_{r_i+1}rilirili+1\frac{r_i-l_i}{r_i-l_i+1} を除算する。
  • li=ril_i = r_i のとき、lil_i の値を集合 BB に入れておく。
  • 最後の計算の際、iiBB に含まれているならば、答えの代わりに 00 を出力する。

このようにすることで0除算を回避しつつ、正しく答えを出力できます。時間計算量は O(N+M)O(N+M) です。