python版线段树
2016-03-02 10:45
375 查看
</pre><pre name="code" class="python">#coding=gbk #线段树 class Tree(object): def __init__(self,l,r): self.l = l self.r = r self.value = 0 self.left = None self.right = None if l < r: mid = (l + r)/2 self.left = Tree(l,mid) self.right = Tree(mid+1,r) def set_value(self,p,value): if self.l == self.r: self.value = value return mid = (self.l + self.r)/2 if 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.value def query(self,x,y): print "query",x,y,'\t',(self.l + self.r)/2,'\t',self.l,self.r,self.value if x <= self.l and y>=self.r: return self.value if self.l == self.r: return self.value mid = (self.l + self.r)/2 if 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 = 1024 import time old =time.time() tree = Tree(0,N) for i in xrange(N+1): # print i tree.set_value(i,1) print tree.query(30,60) print time.time() -old if __name__ == "__main__": main()
相关文章推荐
- Python入门教程 超详细1小时学会Python
- Python爬虫入门七之正则表达式
- Python爬虫入门六之Cookie的使用
- 实验室吃饭记账系统web
- 举例讲解Python设计模式编程中对抽象工厂模式的运用
- Python爬虫入门五之URLError异常处理
- Python内置数据类型之Tuple
- Python爬虫入门四之Urllib库的高级用法
- Python爬虫入门三之Urllib库的基本使用
- Python爬虫入门二之爬虫基础了解
- Python爬虫入门一之综述
- RNN 入门教程 Part 2 – 使用 numpy 和 theano 分别实现RNN模型
- python操作字符串类型json的注意点
- 实例讲解Python设计模式编程之工厂方法模式的使用
- python implement queue
- Python 线程同步
- python queue
- mac下为python安装MySQLdb
- python文件读写编码
- 详解设计模式中的工厂方法模式在Python程序中的运用