/*
题目描述:给出n(0 < n <= 1e5)条水平或竖直的线段,且同一方向上的线段不存在重合,问这些线段一共有多少交点
方法:将水平线段存在vy中,竖直线段存在vx中,将vx、vy按照先左后右、先下后上的顺序排序,然后对y方向的坐标
进行离散化。然后从左向右依次取出一条竖直的线段,计算每一条竖直线段与水平线段交点的个数,将他们相加就
是答案,具体方法如下:
用一个树状数组维护每个y高度存在的线段的个数,这样可以在logn的时间内统计出从y1到y2高度中的水平线段
有多少。假设当前拿出来的竖直线段为(x0 , r , x0 , s),首先找到所有满足x1 <= x0 <= x2的水平线段(x1 , y0 , x2 , y0),
然后将y0在树状数组中加一,然后树状数组查询一次得交点个数;然后再拿出下一条竖直线段(x0' , k , x0' , t),先将刚才
在树状数组中做过标记的水平线段中不满足x1 <= x0' <= x2的线段对应的y0位置减一,然后再将新的满足条件的水平
线段加进来,然后求这条竖直线段与水平线段的交点个数;依此类推求第三条第四条第五条等等的竖直线段交点数
判断x1 <= x0 <= x2的方法见代码
*/
#pragma warning(disable:4786)
#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include
#include
#include