import sys import random class TreapNode: def __init__(self, value): self.value = value self.priority = random.random() self.left = None self.right = None self.size = 1 self.sum = value def update(self): self.size = 1 self.sum = self.value if self.left is not None: self.size += self.left.size self.sum += self.left.sum if self.right is not None: self.size += self.right.size self.sum += self.right.sum def build(arr, start, end): if start > end: return None mid = (start + end) // 2 node = TreapNode(arr[mid]) node.left = build(arr, start, mid - 1) node.right = build(arr, mid + 1, end) node.update() return node def split(node, key): if node is None: return (None, None) left_size = node.left.size if node.left else 0 if key <= left_size: left, temp = split(node.left, key) node.left = temp node.update() return (left, node) else: temp, right = split(node.right, key - left_size - 1) node.right = temp node.update() return (node, right) def merge(left, right): if left is None: return right if right is None: return left if left.priority > right.priority: left.right = merge(left.right, right) left.update() return left else: right.left = merge(left, right.left) right.update() return right def main(): input = sys.stdin.read().split() ptr = 0 N, Q = int(input[ptr]), int(input[ptr+1]) ptr += 2 A = list(map(int, input[ptr:ptr+N])) ptr += N root = build(A, 0, N-1) for _ in range(Q): T = int(input[ptr]) l = int(input[ptr+1]) r = int(input[ptr+2]) ptr +=3 if T == 1: if l > 1: left, temp = split(root, l-1) else: left = None temp = root mid, right = split(temp, r - l + 1) sum_val = mid.sum if mid else 0 new_node = TreapNode(sum_val) new_tree = merge(left, new_node) root = merge(new_tree, right) else: if l > 1: left, temp = split(root, l-1) else: left = None temp = root mid, right = split(temp, r - l + 1) sum_val = mid.sum if mid else 0 merged_temp = merge(mid, right) root = merge(left, merged_temp) print(sum_val) if __name__ == "__main__": main()