yukicoder #568: じゃんじゃん 落とす 委員会

SAの値が決まっているとする。

f[i](l,r)をB以外の問題について正答数がiとしたときのl<=B[j]<rとなるようなB[j]の数とする。(0<=i<5)

f[i](l,r)はBinary Indexed Treeでもっておく。

 

SAを100001とおくと、誰もA問題に正答できないので、B問題を無視すると参加者iの正答数はx[i]となる。

B問題の難易度を固定すれば各自の正答数は確定する。y問以上正答した人の数は、

(B問題以外でy問以上正答した人の数) + (B問題を正答してちょうどy問正答した人の数)

= Σ[i<=y](f[i](0, 100002)) + f[y-1](b, 100002)

で求められる。

このやり方で、2問以上正答する人がM人以上となるようなB問題の難易度の最小値をもとめる。このときの3問以上正答する人の数が解候補になる。

 

A問題の難易度を変えていこう。

今、A問題の難易度がSA+1とする。A問題の難易度をSAに変えると、

A[i]=SAとなるような回答者iの正答数が1増える。よって

f[X[i]](B[i], B[i]+1)が1減って

f[X[i]+1]](B[i], B[i]+1)が1増える。

あとは同様に解候補を求めればよい。