翻译过来:
您需要维护一个数组,它可以执行以下操作。
1.在位置k后插入一个值为r的元素。 (在此操作之后,值为r的元素将是数组中的第k+1个元素,k+1个元素将被移动到位置k+2,以此类推)。
2.删除数组中的第k个元素。(在此操作之后,第k个元素将被移除,并且第k+1个元素将被移动到位置k,以此类推)
3.计算从第[个元素到第r个元素的和。
在这个问题。可以保证的是,所有的数k都是随机生成的,其可能性是从所有的合法值中随机生成的。
(提示:对于一个有n个顶点且根为顶点1的树结构,如果顶点的父节点是随机选择的形式[1,1]。那树的期望高度是0(log n))。
4.2Input
第一行包含一个整数n (1n<2x10),表示运算次数。
然后是n行,每行包含几个整数。第一个整数是操作的类型
·如果它是1,则跟随两个整数k (阵列),则为x (1<x<10
如果它是2,则跟随一个整数k (1《k 《len (数)))。
如果它是3,则跟随两个数lr (1<!relen (数))
注意:在类型1的操作中,如果k=0,则新元素r被插入到数组的最开始,也就是说,插入之后,r应该是数组的第一个元素。
4.3产出
对于每一个类型3的操作输出一个整数在一行表示这个操作的答案。
提示(C/C++和Java用户):结果可能会超出int类型的范围,建议使用long long(在c/C++中或long(在Java中)来存储结果。
解答:
n = int(input())
arr = []
for i in range(n):
op = input().split()
if op[0] == '1':
k = int(op[1])
r = int(op[2])
if k == 0:
arr.insert(0, r)
else:
arr.insert(k, r)
elif op[0] == '2':
k = int(op[1])
arr.pop(k)
else:
l = int(op[1])
r = int(op[2])
total = sum(arr[l-1:r])
print(total)