算法题解答

该文描述了一个需要维护的数组,支持三种操作:在位置k后插入元素,删除指定位置的元素,以及计算数组子区间和。操作中的k是随机生成的,且与树的高度问题相关。对于类型3的操作,需要输出子区间的和。建议在C/C++和Java中使用大整数类型处理可能超出int范围的结果。
摘要由CSDN通过智能技术生成

翻译过来:
您需要维护一个数组,它可以执行以下操作。
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢三火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值