#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
using namespace std;
#define X first
#define Y second
#define eps 1e-2
#define gcd __gcd
#define pb push_back
#define PI acos(-1.0)
#define lowbit(x) (x)&(-x)
#define bug printf("!!!!!\n");
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef long double LD;
typedef pair<int,int> pii;
typedef unsigned long long uLL;
const int N = 1e5+2;
const int INF = 1<<30;
const int mod = 1e9+7;
#define int long long
int n;
struct node{
int a,b,h;
bool operator < (const node A) const{
return h<A.h;
}
}nd[N];
bool cmp(node x,node y){
if(x.b==y.b) return x.a>y.a;
return x.b>y.b;
}
priority_queue<node> q;
int dp[N];
void solve(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld%lld%lld",&nd[i].a,&nd[i].b,&nd[i].h);
sort(nd+1,nd+1+n,cmp);
int res=0;
for(int i=1;i<=n;i++){
while(q.size()&&q.top().a>=nd[i].b) q.pop();
// cout<<q.size()<<" "<<nd[i].h<<endl;
if(q.size()==0){
q.push(nd[i]);
res=max(res,nd[i].h);
}else{
auto tp=q.top();
res=max(res,nd[i].h+tp.h);
q.push({nd[i].a,nd[i].b,nd[i].h+tp.h});
}
// cout<<res<<endl;
}
cout<<res<<endl;
return;
}
int32_t main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
// ios::sync_with_stdio(false);
int t = 1;
//scanf("%d",&t);
while(t--){
// printf("Case %d: ",cas++);
solve();
}
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交