import
java.io.*;
import
java.util.*;
class
GFG {
static
int
lower_bound(
int
arr[],
int
low,
int
high,
int
X)
{
if
(low > high) {
return
low;
}
int
mid = low + (high - low) /
2
;
if
(arr[mid] >= X) {
return
lower_bound(arr, low, mid -
1
, X);
}
return
lower_bound(arr, mid +
1
, high, X);
}
static
int
minAbsoluteSumDiff(
int
A[],
int
B[],
int
N)
{
int
sum =
0
;
int
diff[] =
new
int
[N];
for
(
int
i =
0
; i < N; i++) {
diff[i] = Math.abs(A[i] - B[i]);
sum += diff[i];
}
Arrays.sort(A);
int
bestDiff[] =
new
int
[N];
for
(
int
i =
0
; i < N; i++) {
int
j = lower_bound(A,
0
, N -
1
, B[i]);
if
(j !=
0
&& j != N)
bestDiff[i]
= Math.min(Math.abs(A[j] - B[i]),
Math.abs(A[j -
1
] - B[i]));
else
if
(j ==
0
)
bestDiff[i] = Math.abs(A[j] - B[i]);
else
if
(j == N)
bestDiff[i] = Math.abs(A[j -
1
] - B[i]);
}
int
bestPick =
0
;
for
(
int
i =
0
; i < N; i++) {
bestPick
= Math.max(bestPick, diff[i] - bestDiff[i]);
}
return
sum - bestPick;
}
public
static
void
main(String[] args)
{
int
A[] = {
2
,
5
,
8
};
int
B[] = {
7
,
6
,
1
};
int
N =
3
;
System.out.println(minAbsoluteSumDiff(A, B, N));
}
}