二分经典问题 : 直线交点第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的。
本文作者:qingyanng
本文链接:https://www.cnblogs.com/muscletear/p/16069227.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步