很快半周又过去了,这个半周主要在搞扫描线的内容,也对自己的智商有些着急。
扫描线看了很长时间才总算弄明白了,其实扫描线的思路也比较简单,扫描线(常规题)主要计算一些直角坐标系上长方形周长或面积之类,一个矩形(计算面积的那道题),用l,r,h表示在线段树左右边的坐标,与高。针对x轴建线段树,将y按照大小排序建立扫描线,依次读入扫描线,如果是矩形下边就对该x区间进行覆盖+1,如果遇到上边计算线段树已被覆盖的面积成乘高计算面积,并去除该区间的一层覆盖。弄了好长时间,终于能够完全自己写出代码,像代码中还要对x区间进行离散化处理,专门开辟X数组进行计算各区间的长度,利用二分法提高找到原x位置在离散化处理后的新位置的速度。而线段树和所进行的的划分区间是通过x将区间划分的若干段上进行操作的。
这半周的收获并不大,除了看懂扫描线以外其实我还一直在看区间合并的题,可关于区间合并的题还有些疑问,像求做场连续区间,其中要多建两棵线段树记录左右连续区间的最大值的应用仍然有没弄通的地方(万一该区间最长是正好在中间不接两头的情况),还有关于对lsum与rsum的更新。
可能这段时间脑子有些卡壳,区间合并的资料还是得换思路在多看几遍。