結果
問題 | No.2873 Kendall's Tau |
ユーザー |
![]() |
提出日時 | 2024-09-06 22:17:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,124 ms / 4,500 ms |
コード長 | 2,246 bytes |
コンパイル時間 | 164 ms |
コンパイル使用メモリ | 82,320 KB |
実行使用メモリ | 180,120 KB |
最終ジャッジ日時 | 2024-09-06 22:18:07 |
合計ジャッジ時間 | 19,285 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
def op(x, y):return x + yclass SegTree:def __init__(self, init_val, op, ide_ele):n = len(init_val)self.n = nself.op = opself.ide_ele = ide_eleself.num = 1 << (n - 1).bit_length()self.tree = [ide_ele] * 2 * self.numfor i in range(n):self.tree[self.num + i] = init_val[i]for i in range(self.num - 1, 0, -1):self.tree[i] = self.op(self.tree[2 * i], self.tree[2 * i + 1])def update(self, k, x):k += self.numself.tree[k] = xwhile k > 1:self.tree[k >> 1] = self.op(self.tree[k], self.tree[k ^ 1])k >>= 1def query(self, l, r):res = self.ide_elel += self.numr += self.numwhile l < r:if l & 1:res = self.op(res, self.tree[l])l += 1if r & 1:res = self.op(res, self.tree[r - 1])l >>= 1r >>= 1return resdef __getitem__(self, n):return self.tree[self.num+n]def List(self):return self.tree[self.num:self.num+self.n]def compress(A):S = sorted(set(A))D = dict()for i in range(len(S)):D[S[i]] = ireturn DN = int(input())XY = sorted([list(map(int, input().split())) for _ in range(N)], key=lambda x:x[0])P, Q = 0, 0D = compress([xy[1] for xy in XY])cnt = [0]*len(D)for i in range(N):X, Y = XY[i]cnt[D[Y]] += 1seg = SegTree(cnt, op, 0)tmp = []idx = 0while idx < N:while idx+1 < N and XY[idx][0] == XY[idx+1][0]:tmp.append(XY[idx][1])seg.update(D[XY[idx][1]], seg[D[XY[idx][1]]]-1)idx += 1tmp.append(XY[idx][1])seg.update(D[XY[idx][1]], seg[D[XY[idx][1]]]-1)idx += 1while tmp:y = tmp.pop()if 1 <= D[y]:Q += seg.query(0, D[y])if D[y] < len(D)-1:P += seg.query(D[y]+1, len(D))R, S = N*(N-1)//2, N*(N-1)//2DX = compress([xy[0] for xy in XY])cntX = [0]*len(DX)for i in range(N):X, Y = XY[i]cntX[DX[X]] += 1for c in cntX:if c >= 2:R -= c*(c-1)//2for c in cnt:if c >= 2:S -= c*(c-1)//2print((P-Q)/((R*S)**0.5))