結果
問題 | No.759 悪くない忘年会にしような! |
ユーザー |
![]() |
提出日時 | 2018-12-06 01:36:49 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,262 ms / 2,000 ms |
コード長 | 1,613 bytes |
コンパイル時間 | 186 ms |
コンパイル使用メモリ | 82,124 KB |
実行使用メモリ | 112,784 KB |
最終ジャッジ日時 | 2024-09-13 12:00:14 |
合計ジャッジ時間 | 27,014 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 64 |
ソースコード
class SegmentTree():def __init__(self, size, initial=-1):node_size = 1while node_size < size:node_size <<= 1self.st = [initial] * (2 * node_size - 1)self.size = node_sizedef update(self, target, new_value):target += self.size - 1self.st[target] = new_valuewhile target > 0:target = (target - 1) // 2self.st[target] = max(self.st[target * 2 + 1],self.st[target * 2 + 2])def query(self, a, b):# [a,b)の最大値を求める。return self._query(a, b, 0, 0, self.size)def _query(self, a, b, k, l, r):if r <= a or b <= l:return -1if a <= l and r <= b:return self.st[k]vl = self._query(a, b, k * 2 + 1, l, (l + r) // 2)vr = self._query(a, b, k * 2 + 2, (l + r) // 2, r)return max(vl, vr)def main():n = int(input())points = [tuple(map(int, input().split())) for i in range(n)]v_max = 10**5partition_by_r = [[] for i in range(v_max + 1)]pt_max = SegmentTree(v_max + 1, -1)res = []for i, point in enumerate(points):p, t, r = pointpartition_by_r[r].append((p, t, i + 1))for ptis in partition_by_r[::-1]:ptis.sort(reverse=True)for pti in ptis:p, t, i = ptiif t > pt_max.query(p, v_max + 1):res.append(i)pt_max.update(p, t)res.sort()for point_id in res:print(point_id)if __name__ == '__main__':main()