結果
問題 |
No.1441 MErGe
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:15:56 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,630 bytes |
コンパイル時間 | 199 ms |
コンパイル使用メモリ | 82,252 KB |
実行使用メモリ | 121,660 KB |
最終ジャッジ日時 | 2025-04-15 21:21:59 |
合計ジャッジ時間 | 8,609 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 6 TLE * 6 -- * 16 |
ソースコード
import sys import random random.seed(0) class Node: def __init__(self, value): self.value = value self.sum = value self.size = 1 self.priority = random.random() self.left = None self.right = None def update(self): self.size = 1 self.sum = self.value if self.left: self.size += self.left.size self.sum += self.left.sum if self.right: self.size += self.right.size self.sum += self.right.sum def split(node, k): if node is None: return (None, None) left_size = node.left.size if node.left else 0 if k <= left_size: left, right = split(node.left, k) node.left = right node.update() return (left, node) else: k -= left_size + 1 left, right = split(node.right, k) node.right = left node.update() return (node, right) def merge(a, b): if a is None: return b if b is None: return a if a.priority > b.priority: a.right = merge(a.right, b) a.update() return a else: b.left = merge(a, b.left) b.update() return b def insert(root, pos, value): left, right = split(root, pos) new_node = Node(value) return merge(merge(left, new_node), right) def get_sum(root, l, r): left, temp = split(root, l-1) mid, right_part = split(temp, r - (l-1)) res = mid.sum if mid else 0 # Merge back to restore the tree structure merged = merge(left, mid) merged = merge(merged, right_part) return res def delete_and_insert(root, l, r): left, temp = split(root, l-1) mid, right_part = split(temp, r - (l-1)) sum_val = mid.sum if mid else 0 new_node = Node(sum_val) merged = merge(left, new_node) merged = merge(merged, right_part) return merged def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 Q = int(input[ptr]) ptr += 1 A = list(map(int, input[ptr:ptr+N])) ptr += N queries = [] for _ in range(Q): T = int(input[ptr]) ptr += 1 l = int(input[ptr]) ptr += 1 r = int(input[ptr]) ptr += 1 queries.append((T, l, r)) # Initialize Treap root = None for i in range(N): root = insert(root, i, A[i]) for q in queries: T, l, r = q if T == 1: root = delete_and_insert(root, l, r) else: res = get_sum(root, l, r) print(res) if __name__ == '__main__': main()