传送门:HDU5862
因为题目已经说明所有的线段都是平行于坐标轴的
那么,线段无外乎两种:①平行于x轴;②平行于y轴

那交点必定只有竖向与横向的线段才会产生
另外,此题数据规模显然是不允许我们进行O(n^2)的暴力求解
那我们可以将横向的线段与竖向线段分开处理
对于横向的线段,我们只保留端点

再按x从小到大排序,x相等的情况下,左端点优先于右端点
而竖向的线段同样按x从小到大排序,但是不拆分成两个端点,而是保留整条线段
然后枚举竖向线段,将小于该竖向线段横坐标的所有点进行处理
若点为左端点,则在其对应的值处的树状数组做+1操作,若为右端点,则做-1操作
这保证了对于第i条竖向线段,当前树状数组中记录了横坐标横跨该竖向线段的线段数量(至于相不相交就要看横线的纵坐标在不在竖线的范围内了)
以上转自:http://blog.csdn.net/just_sort/article/details/52244981
蒟蒻刚学扫描线,感觉上面这篇题解介绍的挺到位的,让我也大致了解了扫描线的思想,所以就无耻的CV了。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include