题意:
给定二维平面上的n个点(xi,yi),可能有两个点在同一个位置,
问两个点之间的最大曼哈顿距离是多少
曼哈顿距离:|xi-xj|+|yi-yj|
数据范围:2<=n<=2e5,1<=x,y=1e9
解法:
题目要求计算
m
a
x
∣
x
i
−
x
j
∣
+
∣
y
i
−
y
j
∣
max{|xi-xj|+|yi-yj|}
max∣xi−xj∣+∣yi−yj∣,
∣
x
i
−
x
j
∣
+
∣
y
i
−
y
j
∣
|xi-xj|+|yi-yj|
∣xi−xj∣+∣yi−yj∣,根据右边
∣
y
i
−
y
j
∣
|yi-yj|
∣yi−yj∣正负的两种可能取值,
可以将问题转化为计算
m
a
x
(
∣
(
x
i
−
y
i
)
−
(
x
j
−
y
j
)
∣
,
∣
(
x
i
+
y
i
)
−
(
x
j
+
y
j
)
∣
)
max(|(xi-yi)-(xj-yj)|,|(xi+yi)-(xj+yj)|)
max(∣(xi−yi)−(xj−yj)∣,∣(xi+yi)−(xj+yj)∣)
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=2e5+5;
const int mod=1e9+7;
int a[maxm];
int b[maxm];
int n;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
int x,y;cin>>x>>y;
a[i]=x-y;
b[i]=x+y;
}
sort(a+1,a+1+n);
sort(b+1,b+1+n);
int ans=max(a[n]-a[1],b[n]-b[1]);
cout<<ans<<endl;
return 0;
}