线段树

来源:互联网 发布:淘宝买家的好评率时间 编辑:程序博客网 时间:2024/06/11 13:28

线段树

线段树

   是由n个节点所构成的二分查找树,每次都已logn的时间来查询,可以查找树表示的线的某一段大小。

生成

    线段树的生成非常好操作,首先需要读入每一个点,储存到数组中,用一个下标cur来记录当前生成元素在数组中的位置。再记录生成子线段的范围,如果是点,则储存,否则,递归的生成左右子线段,后,把左右子线段相加当父线段中。规定把中点当作左线段的边界。

查找

    主要问题就是查找,递归的判断,如果当前子线段在查找范围内则返回其数值,记录中点位mid,
这里写图片描述
if(x>mid)
query(x,y,num+num+1);
//要查询的线段在该线段右边,查询该线段的右子节点

那为什么不写x>=mid?


   因为已经归定中点是属于左线段,如果在这种情况取等号的话就会把左线段的最右点划分到了右线段中,造成错误;
else if(y<=mid)
query(x,y,num+num);
//要查询的线段在该线段左边,查询该线段的左子节点

更新

   就更简单了只要判断所更新的点属于那一线段,再更新这一线段上的值,一直到更新到,所要更新的节点。

0 0
原创粉丝点击