(刚才提交了一遍,刚才才发现没有提交上,幸好检查了一下..)马上结课了,感觉自己还是从acm中学到了一些东西,可能学的不是太好,费老师的队我还是不加了,感觉自己并不是那块料,容易分心,做不到专注的干一件事情,但我会在网上继续刷题的,不会把学到的东西忘掉的,而且会进一步的学更多的算法。5000字的总结正在慢慢写,不急,要写就写的完美一点才好。
这周老师讲了线段树,线段树的本质是二叉树,线段树可以实现区间查询和区间更新
。
三个问题
更新点,查询区间。
更新区间,查询点。
更新区间,查询区间
。
线段树的时间复杂度
更新操作:由于总是一条路径从根到某个叶子,而树的深度为log2N,因而为O(log2N)
。
查询操作:每层被访问的节点不超过4个,因而同样为O(log2N)
。
线段树的空间复杂度
设长度为N的数组在线段树中有F(N)个节点
F(N)包括没有使用的下标为0的节点
若N=2n,F(N)=2(n+1)
若N=2(n+1),F(N)=2(n+2)
因而对于2n<=N<=2(n+1),有
2(n+1)<=F(N)<=2(n+2)
F(N)<=4*N
。
线段树的操作
点修改:在线段树中每次只修改一个点。
区间修改:每次修改一个区间的所有数。
离散化:一个小技巧。
做题时还是要记住暴力出奇迹,数不是太大就可以尝试用暴力,会有惊喜的。刷题!