自己YY了一个的写法,不过时间复杂度太高了,网上的想法太6了
题意:给你一些矩阵,求出矩阵的面积并
首先按照x轴离散化线段到线段树上(因为是找连续区间,所以段建树更加好做)。
然后我们可以想一下怎样才能使面积相交呢?我们可以注意到如果矩阵入线出现超过一次就一定有面积相交,所以我们记录入线与出线,再排序y轴,从小到大(注意y轴等大时先进后出)扫描线段。
记录:总长度,当前一整段一起覆盖一次的长度,当前一整段一起覆盖超过一次的长度,当前一整段一起覆盖覆盖的次数(注意这一整段的情况不会更新到孩子节点)为什么是当前一整段且不更新呢?因为我们要计算的是插入这一段(入线或出线)后,所有的线覆盖超过一次的长度。如果仅仅计算入线中超过一次线覆盖的长度,就会少计算一些面积,原因是我们每次会把y轴更新,这样就还有一些不在现在入线这一段中却覆盖超过一次的线段没有统计。
入线:矩阵下方的x轴的线(按照y轴扫描),表示矩阵进入扫描线,开始计算
出现:矩阵上方的x轴的线(按照y轴扫描),表示矩阵已经出去,不能计算了
/*给一些矩阵求矩阵面积交:离散化x轴,排序y轴扫描,注意记录一个cover,关键在此cover表示仅仅次一连续段的覆盖情况们不要更新到孩子节点而此时只需要记录区间覆盖两次及以上的长度是多少就好*/#include