import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.List;
public
class
MinDeletionToEmptyArrays {
static
boolean
isPos(
int
mid, List<Integer> B,
int
N) {
for
(
int
i =
0
; i < N; i++) {
if
(B.get(i) < mid)
mid++;
else
return
false
;
}
return
true
;
}
static
int
findMinM(List<List<Integer>> A,
int
N) {
List<List<Integer>> V =
new
ArrayList<>(N);
List<Integer> B =
new
ArrayList<>();
for
(
int
i =
0
; i < N; i++) {
int
maxi =
0
;
for
(
int
j =
0
; j < A.get(i).size(); j++) {
maxi = Math.max(maxi, A.get(i).get(j) +
1
- j);
}
V.add(
new
ArrayList<>());
V.get(i).add(maxi);
V.get(i).addAll(A.get(i));
}
Collections.sort(V, (a, b) -> a.get(
0
) - b.get(
0
));
for
(
int
i =
0
; i < V.size(); i++) {
B.addAll(V.get(i).subList(
1
, V.get(i).size()));
}
int
low =
1
, high = (
int
)1e9;
while
(high - low >
1
) {
int
mid = (low + high) /
2
;
if
(isPos(mid, B, B.size())) {
high = mid;
}
else
{
low = mid +
1
;
}
}
if
(isPos(low, B, B.size()))
return
low;
else
return
high;
}
public
static
void
main(String[] args) {
int
N =
2
;
List<List<Integer>> A = List.of(
List.of(
10
,
15
,
18
),
List.of(
12
,
11
)
);
System.out.println(findMinM(A, N));
}
}