二分经典问题 : 直线交点第k大,区间顺/逆序排序
- 二分 -> 计数
- 二分横坐标x,统计有多少交点小于等于x
- 怎么判断有焦点:在 x竖一条直线,如果在无穷远的地方竖另一条直线y,那么两条直线li,lj在y上交点的纵坐标,j > i 但是到了x i > j。这就表明这之间有焦点。
https://www.luogu.com.cn/problem/P2824
- p位置上的数要么是大于等于x的,要么是小于x的,这就有了“可二分性”
- 二分p位置上的数是不是大于等于x,那么对于这个序列,我们只关心ai是不是大于等于x的。
- 原序列 大于等于x,就为1,否则就为0. 这样序列只有0和1了,排序操作就把0放一边1放一边就行。
- 对于这个问题,我们使用线段树来维护。查询一段区间内的1的个数记为cnt1,如果是升序,就将这段区间的[r-cnt1+1, r]都更改为1,将[l, r-cnt1]更改为0。降序则将[l, l+cnt1-1]更改为1,将[l+cnt, r]更改为0。这样我们就成功地把排序转化为了区间查询和区间修改。
wls:其实排序这个事情可以想到0和1的。