这几天心态崩了,感冒发烧,,,,,,觉得自己都快被烧傻了难受
最近也没a题,还是在看线段树,单点更新这一类题,感觉这类题也说不好,模板是有的,关键是怎么往这方面想。。
还有那种二维的题目,就像那个求覆盖着的矩阵面积的题目,可以用线段树求解,核心思想是降维,将某一维套用线段树,另一维则用枚举
第一步:将所有矩形拆成两条垂直于x轴的线段,平行x轴的边可以舍去
第二步:定义矩形的两条垂直于x轴的边中x坐标较小的为入边,x坐标较大的为出边,入边权值为+1,出边权值为-1,并将所有的线段按照x坐标递增排序,第i条线段的x坐标记为X[i]
第三步:将所有矩形端点的y坐标进行重映射(也可以叫离散化),原因是坐标有可能很大而且不一定是整数,将原坐标映射成小范围的整数可以作为数组下标,更方便计算,映射可以将所有y坐标进行排序去重,然后二分查找确定映射后的值
第四步:以x坐标递增的方式枚举每条垂直线段,y方向用一个长度为m-1的数组来维护“单位线段”的权值
当枚举到第i条线段时,检查所有“单位线段”的权值,所有权值大于零的“单位线段”的实际长度之和(离散化前的长度)被称为“合法长度”,记为L,那么(X[i] - X[i-1]) * L,就是第i条线段和第i-1条线段之间的矩形面积和,计算完第i条垂直线段后将它插入,所谓"插入"就是利用该线段的权值更新该线段对应的“单位线段”的权值和(这里的更新就是累加)。
大概就是这样。。。。头疼。。哎