import
java.util.*;
class
GFG
{
static
int
Rectangles(
int
[][] rectangle,
int
n)
{
Arrays.sort(rectangle,
new
Comparator<
int
[] >()
{
public
int
compare(
int
[] a,
int
[] b)
{
if
(a[
0
] != b[
0
])
return
Integer.compare(a[
0
], b[
0
]);
return
Integer.compare(a[
1
], b[
1
]);
}
});
ArrayList<ArrayList<Integer>> nested =
new
ArrayList<ArrayList<Integer>>();
ArrayList<Integer> l1 =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < rectangle[n -
1
].length; i++)
l1.add(rectangle[n -
1
][i]);
nested.add(l1);
for
(
int
i = n -
2
; i >=
0
; --i) {
int
high = nested.size() -
1
, low =
0
;
while
(low <= high) {
int
mid = (
int
)((high + low) /
2
);
if
((nested.get(mid)).get(
0
) == rectangle[i][
0
]
|| (nested.get(mid)).get(
1
) <= rectangle[i][
1
])
low = mid +
1
;
else
high = mid -
1
;
}
if
(low == nested.size())
{
ArrayList<Integer> l2 =
new
ArrayList<Integer>();
for
(
int
j =
0
; j < rectangle[i].length; j++)
l2.add(rectangle[i][j]);
nested.add(l2);
}
else
{
(nested.get(low)).set(
1
, rectangle[i][
1
]);
(nested.get(low)).set(
0
, rectangle[i][
0
]);
}
}
return
nested.size();
}
public
static
void
main(String[] args)
{
int
[][] arr = {
new
int
[] {
20
,
30
},
new
int
[] {
10
,
10
},
new
int
[] {
30
,
20
},
new
int
[] {
40
,
50
} };
int
n = arr.length;
System.out.println(Rectangles(arr, n));
}
}