这周入门了一下计算几何,码量挺大的,由于都是基本运算,还没有涉及算法知识,就先不整理了
之后打算在学习计算几何的同时,再回顾一下数据结构,总的 ACM 知识最后看看字符串还有没有能力学下去,打算就看这几个专题看的深一点,毕竟每块算法都入门一下和没学没什么不同。
周六和 lxh 把小米 ICPC 第二场网络海选赛打了一下,跟他还是挺好交流,但是做的还是差强人意,数据结构的那道题不知道怎么进行区间更新,这也是我想要深入学习一个原因,今年的比赛不打算参加了,还没有找到合适的队友,没有打下去的必要。
这周入门了一下分块,下周打算再把入门莫队的题做了。
由于之前线段树打得比较多,所以分块中涉及 push_down 的部分题目做起来比较上手,思路也比较好想,但是有时也会忍不住感叹,这种题也能用分块?
- 求区间 [l,r] 内的 x 的前驱或者后继,对每一个块进行排序,按照二分查找可以将复杂度降到 logn
- 求区间 [l,r] 内大于 x 或小于 x 的元素个数,同样可以按照上述办法解决
- 将一个区间内做多次 +x / *x 的操作时,可以采用 push_down 的思想解决,也可以利用数学推导,更快地解决这个问题
- 多次在某一位置前插入一个数,这样每一块的大小会发生改变,所以要用到动态数组,而且动态数组的大小如果很大的话,会丧失分块的优势,所以需要重新进行分块,这个重构思想我觉得很重要
分块算法的优势主要体现在对于每一个块进行修改时,由于涉及到的元素数目基数不大,所以能够用暴力水过去,但是根据题目而言,如何将题目确定在应用哪一个数据结构上面,或者说如何将题目要求转移到所选取的数据结构上面,对我来说显得比较困难
下周四级考试就要开始了,会忙一下,学习算法,搞竞赛就是让自己重视一下计算机基础,去学习当下比较热的语言,炫耀一下自己掌握了多少多少,会觉得自己很风光,但是等着去抱大腿,等着别人带,未免显得太功利了(有点跑题了)
下周尽力吧,争取开一下二维几何的计算。