2
private static class Job {7
public Job(int start, int end, int profit) {14
private int binarySearch(Job jobs[], int index) {19
int mid = low + (high - low) / 2;20
if (jobs[mid].end <= jobs[index].start) {30
public long maxTaxiEarnings(int n, int[][] rides) {31
Job jobs[] = new Job[rides.length];32
for (int i = 0; i < rides.length; i++) {33
jobs[i] = new Job(rides[i][0], rides[i][1], rides[i][1] - rides[i][0] + rides[i][2]);35
Arrays.sort(jobs, (j1, j2) -> (j1.end - j2.end));36
long[] dp = new long[rides.length];37
dp[0] = jobs[0].profit;38
for (int i = 1; i < jobs.length; i++) {39
long include = jobs[i].profit;40
int index = binarySearch(jobs, i);44
dp[i] = Math.max(include, dp[i - 1]);46
return dp[rides.length - 1];