E - Team Division 解説 by kaichou243

平面走査

チームAに所属する人数が\(i\)であるようなチーム分けの個数を\(C_i\)とすると、答えは\(\sum_i C_i\)です。

ここで、対称性より\(C_i=C_{N-i}\)であるため、\(C_1,\dots,C_{\lfloor\frac{N}{2}\rfloor}\)が求まれば答えは求まります。

今、xy平面上に点\(i\)を座標\((L_i,R_i)\)にとると、領域\(x \leq i \land y \geq i\)にある点の個数を\(X_i\)、領域\(x \leq i \land y \geq N-i\)にある点の個数を\(Y_i\)として、領域\(x \leq N-i \land y \geq N-i\)または領域\(x \leq i \land y \geq i\)\(N\)点全てが含まれるとき\(C_i=\binom{Y_i}{i-(X_i-Y_i)}\)となります。(そうでないとき\(C_i=0\)です)

よって、x座標の昇順に平面走査を行えば、各\(i\)について\(X_i,Y_i\)がBITで点の個数を保持することでもとまるため、\(O(N \log N)\)で解くことができます

投稿日時:
最終更新: