結果
問題 | No.1441 MErGe |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:16:25 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,279 bytes |
コンパイル時間 | 171 ms |
コンパイル使用メモリ | 82,332 KB |
実行使用メモリ | 153,844 KB |
最終ジャッジ日時 | 2025-03-20 21:17:18 |
合計ジャッジ時間 | 10,759 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 8 TLE * 4 -- * 16 |
ソースコード
import sysimport randomrandom.seed(42)class Node:__slots__ = ['value', 'sum', 'size', 'left', 'right', 'priority']def __init__(self, value):self.value = valueself.sum = valueself.size = 1self.left = Noneself.right = Noneself.priority = random.randint(0, 1 << 31)def get_size(node):return node.size if node else 0def get_sum(node):return node.sum if node else 0def update(node):if node:node.size = 1 + get_size(node.left) + get_size(node.right)node.sum = node.value + get_sum(node.left) + get_sum(node.right)def split(node, key):if node is None:return (None, None)current_key = get_size(node.left)if current_key >= key:left, right = split(node.left, key)node.left = rightupdate(node)return (left, node)else:left, right = split(node.right, key - current_key - 1)node.right = leftupdate(node)return (node, right)def merge(left, right):if not left:return rightif not right:return leftif left.priority > right.priority:left.right = merge(left.right, right)update(left)return leftelse:right.left = merge(left, right.left)update(right)return rightdef main():input = sys.stdin.read().split()ptr = 0N, Q = int(input[ptr]), int(input[ptr+1])ptr +=2A = list(map(int, input[ptr:ptr+N]))ptr +=Nroot = Nonefor num in A:root = merge(root, Node(num))for _ in range(Q):T = int(input[ptr])l = int(input[ptr+1])r = int(input[ptr+2])ptr +=3if T == 1:l -=1r -=1left, temp = split(root, l)mid, right_tree = split(temp, r - l +1)sum_mid = get_sum(mid)new_node = Node(sum_mid)root = merge(left, merge(new_node, right_tree))else:l -=1r -=1left, temp = split(root, l)mid, right_tree = split(temp, r - l +1)print(mid.sum if mid else 0)root = merge(left, merge(mid, right_tree))if __name__ == "__main__":main()