AtCoder Beginner Contest 215 F - Dist Max 2

平面上有一系列的点(xi,yi)(x_i,y_i)(xi​,yi​),定义两点(xi,yi),(xj,yj)(x_i,y_i),(x_j,y_j)(xi​,yi​),(xj​,yj​)的距离为min(∣xi−xj∣,∣yi−yj∣)min(|x_i-x_j|,|y_i-y_j|)min(∣xi​−xj​∣,∣yi​−yj​∣),求出最远的两个点的距离

想过用二分答案,但是没有想到怎么check,赛后看到题解发现其实很简单。

首先还是二分答案,要找到一个点对使两个元素的差值都要大于等于这个答案。所以,首先先对x坐标进行排序,那么点对的范围就可以容易找到,比如对于x1x_1x1​有着xk−1<x1+ansx_{k-1}<x_1+ansxk−1​<x1​+ans并且xk>=x1+ansx_k>=x_1+ansxk​>=x1​+ans,那么k到n的点对就满足了x方向的条件。这个时候,我们维护一个后缀的最大值和最小值,O(1)O(1)O(1)查找k~n的y方向的最大值和最小值,和y1y_1y1​进行比较,如果存在满足要求的,那么ans就是可行的;如果不满足,就求x2x_2x2​,这样滑动窗口求下去。

#include <bits/stdc++.h>
#define f(i, n) for(int i = 1; i <= n; i ++)
#define nf(i, n) for(int i = n; i >= 1; i --)
typedef long long ll;
using namespace std;const int N = 2e5 + 10;struct node
{int x, y;
};
node a[N];int mx[N], mn[N];bool cmp(const node &a, const node &b)
{return a.x < b.x;
}int n;bool check(int x)
{int p = 1, q = 1;while (p <= n && q <= n){while (a[q].x - a[p].x < x && q <= n)++ q;if (q > n)return false;if (a[p].y - mn[q] >= x || mx[q] - a[p].y >= x)return true;++ p; }return false;
}int main()
{//freopen("in.txt", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);int T = 1;//cin >> T;while (T --){cin >> n;f(i, n)cin >> a[i].x >> a[i].y;sort (a + 1, a + n + 1, cmp);mx[n] = mn[n] = a[n].y;nf(i, n - 1){mx[i] = max(mx[i + 1], a[i].y);mn[i] = min(mn[i + 1], a[i].y);}int l = 0, r = 1e9, mid, ans;while (l <= r){mid = (l + r) >> 1;if (check(mid)){ans = mid;l = mid + 1;}elser = mid - 1;}cout << ans;}return 0;
}

AtCoder Beginner Contest 215 F - Dist Max 2相关推荐

  1. AtCoder Beginner Contest 178 E.Dist Max

    AtCoder Beginner Contest 178 E.Dist Max 题目链接 如果我们知道一个 nnn 维的点,对每一个维度都有一个运算符的话,很明显一共有 2n2^n2n 种运算,而曼哈 ...

  2. AtCoder Beginner Contest 215 G - Colorful Candies 2

    AtCoder Beginner Contest 215 G - Colorful Candies 2 有n个糖果,每个糖果有着一个颜色a[i],每次拿k个糖果期望拿到E(x)个不同颜色的糖果,求出k ...

  3. AtCoder Beginner Contest 215 E - Chain Contestant

    AtCoder Beginner Contest 215 E - Chain Contestant 给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子 ...

  4. AtCoder Beginner Contest 204 F Hanjo 2

    AtCoder Beginner Contest 204 F Hanjo 2 H宽,W长的二维平面上,用1 * 1或者2 * 1的地砖来铺,要求铺满,求出方案数. 数据范围H <= 6, W & ...

  5. AtCoder Beginner Contest 170 F. Pond Skater

    AtCoder Beginner Contest 170 F. Pond Skater 题目链接 第一次碰到会写的 F,真的哭辽/(ㄒoㄒ)/~~,BFS+剪枝 题目有几个坑点: 1.初始化,我们直接 ...

  6. AtCoder Beginner Contest 167 F.Bracket Sequencing

    AtCoder Beginner Contest 167 F.Bracket Sequencing 题目链接 判断括号匹配的字符串问题~ 首先给出的所有字符串的左右括号数是要匹配的,这个很好判断,用一 ...

  7. Coprime AtCoder Beginner Contest 215

    Coprime AtCoder Beginner Contest 215 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points ...

  8. AtCoder Beginner Contest 187 F.Close Group Editorial

    AtCoder Beginner Contest 187 F.Close Group Editorial 题目链接 状压DP~ 如果对边暴力的话复杂度约为 21502^{150}2150,显然不可取, ...

  9. [AtCoder Beginner Contest 215] A-G题解

    文章目录 A - Your First Judge B - log2(N) C - One More aab aba baa D - Coprime 2 E - Chain Contestant F ...

最新文章

  1. 微软Azure Stack混合云进入中国
  2. java 只去掉_30行代码带你了解Java的Serializable接口
  3. Install vsftpd on centos
  4. svn由于连接方在一段时间后没有正确答复或连接的主机没有反应连接尝试失败...
  5. Android相对布局(RelativeLayout)常用属性、练习使用按键、文本框等控件、线性布局(LinearLayout)属性
  6. php oop基础,php面向对象编程(oop)基础
  7. MongoDB之 写安全(Write Concern)
  8. 音视频开发( 34)---麦克风阵列原理二
  9. 艰苦的编译boost python (失败)
  10. 昨晚学妹参加了B站秋招笔试,还想考考我?
  11. 什么时候要用存储过程,存储过程的优点 .
  12. c++如何让类对象只能在堆(栈)上分配空间
  13. Oracle-常见的错误
  14. vs2013 mfc连接MySQL数据库
  15. [MySQL学习]Innodb锁相关描述翻译
  16. CSDN账号注销的问题:手机号注册的CSDN号是可以注销的
  17. 一篇文章教会你使用Python抓取微博评论
  18. 【赠书】腾讯广告算法大赛冠军、Kaggle Grandmaster倾力打造,涵盖Kaggle、阿里天池等赛题...
  19. InvalidSelectorException:Message: Locator Strategy 'css selector' is not supported for this session
  20. 调试本地SQLServer存储过程

热门文章

  1. SQL事务用法begin tran,commit tran和rollback tran的用法
  2. iOS app 右滑返回
  3. 怎样cp文件夹时忽略指定的文件夹和文件
  4. 发布ccnet的步骤
  5. Eclipse打JAR包引用的第三方JAR包找不到 问题解决
  6. C#中MySQL语句带参数的模糊匹配问题
  7. day21.模块和包
  8. 四 Spring的工厂类,xml的配置
  9. Nginx使用Location匹配URL进行伪静态
  10. Getting Installation aborted (Status 7) ApplyParsePerms: lsetfilecon of /syst...【转】