import
java.io.*;
import
java.util.*;
class
ListComparator<T
extends
Comparable<T> >
implements
Comparator<List<T> > {
@Override
public
int
compare(List<T> o1, List<T> o2)
{
for
(
int
i =
0
; i < Math.min(o1.size(), o2.size());
i++) {
int
c = o1.get(i).compareTo(o2.get(i));
if
(c !=
0
) {
return
c;
}
}
return
Integer.compare(o1.size(), o2.size());
}
}
class
GFG {
public
static
int
maxPeople(List<List<Integer> > data,
int
n)
{
Collections.sort(data,
new
ListComparator<>());
List<Integer> dp =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < n; i++) {
dp.add(
0
);
}
dp.set(
0
, data.get(
0
).get(
2
));
Map<Integer, Integer> mp
=
new
HashMap<Integer, Integer>();
for
(
int
i =
0
; i <
15
; i++) {
mp.put(i,
0
);
}
mp.put(data.get(
0
).get(
1
), dp.get(
0
));
for
(
int
i =
1
; i < n; i++) {
int
curstart = data.get(i).get(
0
);
int
curend = data.get(i).get(
1
);
if
(curstart <= data.get(i -
1
).get(
1
)) {
int
left =
0
;
int
right = i;
int
var = data.get(i).get(
0
);
while
(left < right) {
int
mid = left + (right - left) /
2
;
if
(data.get(mid).get(
1
) < var)
left = mid;
else
right = mid -
1
;
}
dp.set(i, Math.max(
dp.get(i -
1
),
mp.get(data.get(left).get(
1
))
+ data.get(i).get(
2
)));
mp.put(
data.get(i).get(
1
),
Math.max(dp.get(i),
mp.get(data.get(i).get(
1
))));
}
else
{
dp.set(i,
dp.get(i -
1
) + data.get(i).get(
2
));
mp.put(data.get(i).get(
1
),
Math.max(mp.get(data.get(i).get(
1
)),
dp.get(i)));
}
}
return
dp.get(n -
1
);
}
public
static
void
main(String[] args)
{
List<List<Integer> > Meetings =
new
ArrayList<>();
List<Integer> a =
new
ArrayList<Integer>();
a.add(
5
);
a.add(
8
);
a.add(
3
);
Meetings.add(a);
List<Integer> b =
new
ArrayList<Integer>();
b.add(
1
);
b.add(
4
);
b.add(
5
);
Meetings.add(b);
List<Integer> c =
new
ArrayList<Integer>();
c.add(
7
);
c.add(
10
);
c.add(
2
);
Meetings.add(c);
int
N = Meetings.size();
System.out.println(maxPeople(Meetings, N));
}
}