二分经典问题 : 直线交点第k大,区间顺/逆序排序

image

  • 二分 -> 计数
  • 二分横坐标x,统计有多少交点小于等于x
  • 怎么判断有焦点:在 x竖一条直线,如果在无穷远的地方竖另一条直线y,那么两条直线li,lj在y上交点的纵坐标,j > i 但是到了x i > j。这就表明这之间有焦点。
    image

image

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的。

posted @ 2022-03-28 21:31  qingyanng  阅读(30)  评论(0编辑  收藏  举报