結果
問題 |
No.3116 More and more teleporter
|
ユーザー |
|
提出日時 | 2025-04-20 11:42:21 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,790 bytes |
コンパイル時間 | 429 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 32,780 KB |
最終ジャッジ日時 | 2025-04-20 11:42:30 |
合計ジャッジ時間 | 8,369 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 4 TLE * 1 -- * 17 |
ソースコード
import sys input = sys.stdin.readline INF = 10**18 class SegmentTree: def __init__(self, n): self.n = n self.tree = [INF] * (4 * n) def update(self, idx, val, node=1, start=1, end=None): if end is None: end = self.n if start == end: self.tree[node] = val else: mid = (start + end) // 2 if idx <= mid: self.update(idx, val, 2 * node, start, mid) else: self.update(idx, val, 2 * node + 1, mid + 1, end) self.tree[node] = min(self.tree[2 * node], self.tree[2 * node + 1]) def query(self, left, right, node=1, start=1, end=None): if end is None: end = self.n if right < start or end < left: return INF if left <= start and end <= right: return self.tree[node] mid = (start + end) // 2 p1 = self.query(left, right, 2 * node, start, mid) p2 = self.query(left, right, 2 * node + 1, mid + 1, end) return min(p1, p2) def main(): N, Q = map(int, input().split()) st1 = SegmentTree(N) st2 = SegmentTree(N) answers = [] for _ in range(Q): query = list(map(int, input().split())) if query[0] == 1: x = query[1] direct = x - 1 min1 = st1.query(1, x) min2 = st2.query(x, N) cost1 = min1 + x if min1 != INF else INF cost2 = min2 - x if min2 != INF else INF ans = min(direct, cost1, cost2) answers.append(ans) else: _, x, c = query st1.update(x, c - x) st2.update(x, c + x) for ans in answers: print(ans) if __name__ == "__main__": main()