3
// Searching for next passenger who can sit in the car4
int binarySearch(vector<vector<int>> &rides, int val) {5
int s = 0, e = rides.size() - 1;6
int ans = rides.size();8
int mid = s + (e - s) / 2;9
if (rides[mid][0] >= val) {19
long long helper(int i, vector<vector<int>> &rides) {20
if (i == rides.size()) {23
if (dp[i] != -1) return dp[i];24
long long op1 = helper(i + 1, rides); // We didn't pick this ith passenger25
int idx = binarySearch(rides, rides[i][1]);27
rides[i][1] - rides[i][0] + rides[i][2] + helper(idx, rides); // We pick this ith passenger28
return dp[i] = max(op1, op2);32
long long maxTaxiEarnings(int n, vector<vector<int>> &rides) {33
memset(dp, -1, sizeof dp);34
sort(rides.begin(), rides.end());35
return helper(0, rides);