python版线段树

来源:互联网 发布:cctv7观军事知天下视频 编辑:程序博客网 时间:2024/06/11 16:06
</pre><pre name="code" class="python">#coding=gbk#线段树class Tree(object):def __init__(self,l,r):self.l = lself.r = rself.value = 0self.left = Noneself.right = Noneif l < r:mid = (l + r)/2self.left = Tree(l,mid)self.right = Tree(mid+1,r)def set_value(self,p,value):if self.l == self.r:self.value = valuereturnmid = (self.l + self.r)/2if p <= mid:self.left.set_value(p,value)else:self.right.set_value(p,value)self.push_up()def push_up(self):self.value = self.left.value + self.right.valuedef query(self,x,y):print "query",x,y,'\t',(self.l + self.r)/2,'\t',self.l,self.r,self.valueif x <= self.l and y>=self.r:return self.valueif self.l == self.r:return self.valuemid = (self.l + self.r)/2if mid >= y:return self.left.query(x,y)elif mid < x:return self.right.query(x,y)else:return self.left.query(x,mid) + self.right.query(mid+1,y)def main():N = 1024import timeold =time.time()tree = Tree(0,N)for i in xrange(N+1):# print itree.set_value(i,1)print tree.query(30,60)print time.time() -oldif __name__ == "__main__":main()

0 0
原创粉丝点击