#include #include #include using namespace std; int N; int A[1<<17],B[1<<17],C[1<<17]; int invi[1<<17],invinvi[1<<17]; vectorG[2<<17]; int n; long memo[2<<17]; bool vis[2<<17]; void add_edge(int a,int b,int fm,int k,int l,int r) { if(b<=l||r<=a)return; else if(a<=l&&r<=b) { G[fm].push_back(k); } else { add_edge(a,b,fm,k*2+1,l,(l+r)/2); add_edge(a,b,fm,k*2+2,(l+r)/2,r); } } long dfs(int u) { if(vis[u])return memo[u]; memo[u]=-1; vis[u]=true; long t=0; for(int v:G[u]) { long k=dfs(v); if(k==-1)return-1; t=max(t,k); } if(u>=n-1)t+=B[invinvi[u-(n-1)]]; return memo[u]=t; } main() { cin>>N; n=1; while(n >ai(N); for(int i=0;i>A[i]>>B[i]>>C[i]; ai[i]=make_pair(A[i],i); } sort(ai.begin(),ai.end()); for(int i=0;i