結果
問題 |
No.759 悪くない忘年会にしような!
|
ユーザー |
![]() |
提出日時 | 2020-03-18 23:35:50 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 648 ms / 2,000 ms |
コード長 | 1,274 bytes |
コンパイル時間 | 89 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 53,632 KB |
最終ジャッジ日時 | 2024-12-14 02:45:35 |
合計ジャッジ時間 | 14,209 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 64 |
ソースコード
#!/usr/bin/env python3.8 import sys read = sys.stdin.buffer.read readline = sys.stdin.buffer.readline readlines = sys.stdin.buffer.readlines from operator import itemgetter N = int(readline()) U = 10 ** 4 + 1 m = map(int, read().split()) ABC = ((U - a, U - b, U - c) for a, b, c in zip(m, m, m)) IABC = sorted(enumerate(ABC, 1), key=itemgetter(1)) class MinBIT(): INF = 10 ** 9 def __init__(self, seq): self.size = len(seq) self.build(seq) def build(self, seq): data = seq size = self.size for i, x in enumerate(data): j = i + (i & (-i)) if j < size and data[j] > data[i]: data[j] = data[i] self.data = data def get_min(self, i): s = INF while i: t = self.data[i] if s > t: s = t i -= i & -i return s def update(self, i, x): while i < self.size: if self.data[i] <= x: return self.data[i] = x i += i & -i answers = [] INF = U + 10 bit = MinBIT([INF] * INF) for i, (a, b, c) in IABC: x = bit.get_min(b) if x > c: bit.update(b, c) answers.append(i) answers.sort() print('\n'.join(map(str, answers)))