CSES - Shared codeLink to this code:
https://cses.fi/paste/75817c5aac1af2f765da4a/
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,left=0,right=n,mid;
cin>>n;
vector<vector<int>>p(n,vector<int>(3));
for(int i=0;i<n;i++){
for(int j=0;j<3;j++){
cin>>p[i][j];
}
}
long long dp[n+1];
dp[0]=0;
sort(p.begin(),p.end(),[&](auto &a,auto &b){
return a[1]<b[1];
});
auto search=[&](int val){
left=0,right=n;
while(left<right){
mid=left+(right-left)/2;
if(p[mid][1]<val){
left=mid+1;
}else{
right=mid;
}
}
return right;
};
for(int i=0;i<n;i++)
dp[i+1]=max(dp[i],dp[search(p[i][0])]+p[i][2]);
cout<<dp[n];
}