Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更快地计算总和_Python_Optimization_Sum - Fatal编程技术网

Python 如何更快地计算总和

Python 如何更快地计算总和,python,optimization,sum,Python,Optimization,Sum,内存限制:256 MB 时限:1秒 你好 我们有以下代码: N, M = list(map(int, input().split())) stones = list(map(int, input().split())) for __ in range(M): command, index, num = input().split() index, num = int(index), int(num) if command == "S": print(s

内存限制:256 MB

时限:1秒

你好

我们有以下代码:

N, M = list(map(int, input().split()))
stones = list(map(int, input().split()))

for __ in range(M):
    command, index, num = input().split()
    index, num = int(index), int(num)

    if command == "S":
        print(sum(stones[index:num + 1]))
    elif command == "M":
        stones[index] = num
其中:

  • N是列表
    石头的长度
  • M是
    命令的数量
  • 一,≤ N、 M≤ 10**5
  • 格式为
    {type}{index}{index2或value}
    的命令有两种类型:
    • “S”用于打印范围内项目的总和
      [index;index2]
    • “M”将
      索引上项目的值更改为新的0≤ <代码>值
      ≤ 十,
  • 此代码超出了时间限制。那么,如何优化它呢

    样本输入: 样本输出:
    如果您使用
    b
    更新列表项,并且以前的值是
    a
    ,则新的和是
    s+b-a
    (使用
    s
    旧的和)。因此,您可以定义一个“sumtree”,在二叉树中存储范围内的和。然后每个sum调用都是O(logn),更新也是O(logn)。
    sum(为[x]范围内的i(索引:num+1)中的i添加[i])
    不会为每个片构建额外的列表。另外,您也可以只收集输出并在最后打印一次(使用
    '\n'.join
    )。@schwobaseggg生成器比为
    sum
    创建切片进行内部迭代要慢得多。您正在优化内存使用,而不是运行时。@WillemVanOnsem,我不完全理解如何实现这个二叉树。你能更详细地解释一下这一点吗?如果你用
    b
    更新列表项,而之前的值是
    a
    ,那么新的和是
    s+b-a
    (用
    s
    旧的和)。因此,你可以定义一个“sumtree”,在二叉树中存储范围内的和。然后每个sum调用都是O(logn),更新也是O(logn)。
    sum(为[x]范围内的i(索引:num+1)中的i添加[i])
    不会为每个片构建额外的列表。另外,您也可以只收集输出并在最后打印一次(使用
    '\n'.join
    )。@schwobaseggg生成器比为
    sum
    创建切片进行内部迭代要慢得多。您正在优化内存使用,而不是运行时。@WillemVanOnsem,我不完全理解如何实现这个二叉树。你能更详细地解释这一点吗?
    9 10
    1 1 2 3 5 0 4 9 4
    S 2 4
    S 8 8
    S 0 8
    S 4 5
    M 5 9
    S 0 8
    S 4 5
    M 0 7
    S 1 8
    S 0 5
    
    10
    4
    29
    5
    38
    14
    37
    27