ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABC215F题解

2021-08-22 05:00:07  阅读:174  来源: 互联网

标签:ABC215F 遍历 题解 mid 横坐标 端点 纵坐标 operatorname


题面

比赛结束后第一时间想到这个题的解法。
赛时已经想到了这是个二分,我们以此为突破口继续往下走。
考虑 \(\operatorname{check}\) 函数怎么写。我们看这个 \(n\) 是 \(10^7\) 级别的,所以时间复杂度应该是 \(O(n\log_2n)\) ,所以 \(\operatorname{check}\) 函数里面可以遍历整个数组。
那我们先把原数组按照横坐标排个序扔进去做 \(\operatorname{2-pointer}\) 不就可以了么。

我以 \(i\) 为右端点, \(j\) 为左端点,那么什么时候我们可以右移左端点?就是 \(j+1\) 这个点,他的横坐标和 \(i\) 的差值大于等于这个 \(mid\) 。
那么显然如果我在 \(i\) 处做到了 \(j\) ,那么所有 \(i\) 右边的点和 \(j\) 的组合都是合法的,所以这个 \(j\) 他就永远是合法的。
那么我们就可以记录一下已做到的 \(j\) 他的纵坐标的最大值和最小值,和每一个进去的 \(i\) 的纵坐标减一减,如果纵坐标之差要大于等于 \(mid\) ,而横坐标我们已经证明了他的差值必定大于等于 \(mid\) ,那么这个 \(mid\) 就肯定是成立的。

但是这个题,如果只遍历一次那么答案可能会被漏掉,所以还得从右往左遍历一遍,此时 \(j\) 是右端点, \(i\) 是左端点。

标签:ABC215F,遍历,题解,mid,横坐标,端点,纵坐标,operatorname
来源: https://www.cnblogs.com/1358id/p/15171179.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有