class Solution { private static final int END = 0; private static final int START = 1; private record Event(int time, int type, int payoff) {} public int maxTwoEvents(int[][] events) { var times = new ArrayList(); for (var event : events) { times.add(new Event(event[0], START, event[2])); times.add(new Event(event[1] + 1, END, event[2])); } times.sort(Comparator.comparing(Event::time).thenComparing(Event::type)); int answer = 0, maxPayoff = 0; for (var time : times) { switch (time.type) { case START: answer = Math.max(answer, time.payoff + maxPayoff); break; case END: maxPayoff = Math.max(maxPayoff, time.payoff); break; } } return answer; } }