結果
問題 | No.2873 Kendall's Tau |
ユーザー |
👑 |
提出日時 | 2024-09-07 00:31:04 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,010 ms / 4,500 ms |
コード長 | 1,769 bytes |
コンパイル時間 | 378 ms |
コンパイル使用メモリ | 82,400 KB |
実行使用メモリ | 156,672 KB |
最終ジャッジ日時 | 2024-09-07 00:31:23 |
合計ジャッジ時間 | 18,114 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
class BIT: def __init__(self, n): self.n = n self.data = [0] * (n + 1) if n == 0: self.n0 = 0 else: self.n0 = 1 << (n.bit_length() - 1) def sum_(self, i): s = 0 while i > 0: s += self.data[i] i -= i & -i return s def sum(self, l, r=-1): if r == -1: return self.sum_(l) else: return self.sum_(r) - self.sum_(l) def get(self, i): return self.sum(i, i + 1) def add(self, i, x): i += 1 while i <= self.n: self.data[i] += x i += i & -i def lower_bound(self, x): if x <= 0: return 0 i = 0 k = self.n0 while k > 0: if i + k <= self.n and self.data[i + k] < x: x -= self.data[i + k] i += k k //= 2 return i + 1 n = int(input()) xy = [list(map(int, input().split())) for _ in range(n)] xy.sort(key=lambda x: x[0]) Y_ = sorted(set(y for _, y in xy)) dic = {y: i for i, y in enumerate(Y_)} add = [] b = xy[0][0] bit = BIT(len(Y_)) p = 0 q = 0 for x, y in xy: y = dic[y] if b == x: add.append(y) else: for y_ in add: bit.add(y_, 1) add = [y] b = x p += bit.sum(y) q += bit.sum(y + 1, len(Y_)) X = [x for x, _ in xy] X.sort() r = n * (n - 1) // 2 row = 0 b = X[0] for x in X: if b == x: r -= row row += 1 else: row = 1 b = x Y = [y for _, y in xy] Y.sort() s = n * (n - 1) // 2 row = 0 b = Y[0] for y in Y: if b == y: s -= row row += 1 else: row = 1 b = y ans = (p - q) / ((r * s) ** 0.5) print(ans)