結果
問題 |
No.1675 Strange Minimum Query
|
ユーザー |
![]() |
提出日時 | 2021-09-10 22:04:42 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,094 ms / 2,000 ms |
コード長 | 1,558 bytes |
コンパイル時間 | 415 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 85,748 KB |
最終ジャッジ日時 | 2024-06-12 00:15:13 |
合計ジャッジ時間 | 23,553 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
from collections import defaultdict import sys input = sys.stdin.buffer.readline sys.setrecursionlimit(10 ** 7) class UF_tree: def __init__(self, n): self.root = [-1] * (n + 1) def find(self, x): stack = [] while self.root[x] > 0: stack.append(x) x = self.root[x] for i in stack: self.root[i] = x return x def isSame(self, x, y): return self.find(x) == self.find(y) def unite(self, x, y): x = self.find(x) y = self.find(y) if x == y: return False if x < y: x, y = y, x self.root[x] += self.root[y] self.root[y] = x return True def size(self, x): return -self.root[self.find(x)] def main(): d = defaultdict(list) val = set() N, Q = map(int, input().split()) for _ in range(Q): L, R, B = map(int, input().split()) val.add(B) d[B].append((L, R)) ans = [-1] * N uf = UF_tree(N) for v in sorted(val, reverse=True): for l, r in d[v]: l -= 1 l = uf.find(l) if l < r: if ans[l] < 0: ans[l] = v else: print(-1) return for l, r in d[v]: l -= 1 l = uf.find(l) while l < r: uf.unite(l, l+1) l = uf.find(l) for i in range(N): if ans[i] < 0: ans[i] = 10 ** 9 print(*ans) return main()