如何解决为什么我的细分树无法及时运行?
我正在尝试以下问题,并且在经过多个小时的多次提交后,我仍然无法及时运行我的解决方案
问题 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()方法,但是我对这些事情并不是真正的专家,如果有人可以进一步阐明这一点,那么请做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。