统计区间内的线段
一维区间
¶问题简述
¶坐标轴上存在
问题简析
¶先对线段进行排序:左端点小的排在前面,左端点相同时,右端点小的排在前面。
记
在扫描的过程中,不难有:
区间左侧
与当前区间不相交的数量为线段右端点个数,即 ;区间右侧
与当前区间不相交的数量为线段左端点个数,即 ;
由容斥定理可知,与区间
小结
¶对区间进行排序(或标号),再维护两个前缀和就可以了。
- 时间复杂度:
- 空间复杂度:
二维区间(离线查询)
¶问题描述
¶二维坐标系中存在
问题简析
¶先仅考虑与
为上端点在点 上的线段条数; 为下端点在 上的线段条数,初始时 ; 表示窗口 的左边界之左(不包括左边界)与区间 相交的线段数, 表示窗口 的右边界之左(包括右边界)与区间 相交的线段数;
不难发现
将所有的窗口按照左边界
若
中存在窗口(必在队首) 满足 ,执行下述操作,直到队列中没有这样的 :取出队首元素
;等待所有未操作过的且
坐标小于等于 的线段计入到 中;计算此时
坐标在 左侧的线段中,与区间 相交的垂直线段条数:则此时
即为与 轴平行的线段中与 相交的数量。
将
丢进 队尾,并执行下述操作:等待所有未操作过的且
坐标小于 的线段计入到 中;计算此时
坐标在 左侧的线段中,与区间 相交的垂直线段条数:继续遍历排好序的窗口
;
类似地,可得到与窗口
小结
¶以统计窗口与平行于
和一维问题的区别在于多了一个动态计入
- 时间复杂度:
- 空间复杂度:
二维区间(在线查询)
¶和上一个问题类似,不同的是,每次查询需要立刻给出答案,即我们无法再对窗口进行排序了。
问题简析
¶在离线查询的算法中,因为将查询窗口进行排序,所以每次计算窗口的左右边界时,天然地保证了当前考虑过的线段全在边界以左。如果我们增加一个额外的维度维护
不难想到可以建立一棵主席树(可持久化线段树),每个版本为只包含某个特定的
小结
¶和离线查询的版本相比,把线段树换成了主席树,因此无论时间复杂度还是空间复杂度都需要再乘一个
- 时间复杂度:
- 空间复杂度: