为什么我的细分树无法及时运行?

问题描述

我正在尝试以下问题,并且在经过多个小时的多次提交后,我仍然无法及时运行我的解决方

问题 https://codeforces.com/problemset/problem/339/D

我的解决方

def getInts():
    return [int(s) for s in input().split()]
 
class SegmentTree(object):
    def __init__(self,arr):
        self.arr = arr
        self.tree_size = 2 * len(arr) - 1
        self.tree = [0] * self.tree_size
        self.build_tree(arr)
      
    def build_tree(self,arr):
        len_A = (self.tree_size+1)//2
        zz = len_A-1
        for j in range(zz,zz+len_A):
            self.tree[j] = arr[j-zz]
        flag = True
        while zz:
            zz //= 2
            len_A //= 2
            for node in range(zz,zz+len_A):
                val1 = self.tree[node*2+1]
                val2 = self.tree[node*2+2]
                if flag:
                    self.tree[node] = val1 | val2
                else:
                    self.tree[node] = val1 ^ val2
            flag = False    
            
 
    def update(self,start,value):
        len_A = (self.tree_size+1)//2
        zz = len_A-1+start
        self.tree[zz] = value
        flag = True
        while zz:
            zz -= 1
            zz //= 2
            val1 = self.tree[zz*2+1]
            val2 = self.tree[zz*2+2]
            if flag:
                self.tree[zz] = val1 | val2
            else:
                self.tree[zz] = val1 ^ val2
            flag = False
            
def solve():
    N,M = getInts()
    A = getInts()
    ttt = SegmentTree(A)
    for m in range(M):
        P,B = getInts()
        ttt.update(P-1,B)
        print(ttt.tree[0])
    return
 
solve()

这个想法是建立一个片段树,原始数组的每个元素都是一个叶子,每个操作(交替进行OR或XOR)都是下一个层次,直到我们到达树的根为止。

很显然,我并没有实现最佳效果,因为对于最大的输入,它仍然无法及时运行。将我的解决方案与其他人在Pypy / Python中的解决方案进行比较后,我完全为为什么我的解决方案无法及时运行而感到困惑。

谢谢。

解决方法

在与其他人的成功解决方案进行了大量尝试之后,我能够通过添加以下标头代码来进行上述操作:

import sys
reader = (line.rstrip() for line in sys.stdin)
input = reader.__next__

我只能认为这可以加快速度,因为它不必每次都查找input()方法,但是我对这些事情并不是真正的专家,如果有人可以进一步阐明这一点,那么请做。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...