#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define MAXN 300005
using namespace std;
struct rect{
int s,t,h,num;
bool operator<(const rect&x)const{
return h<x.h;
}
}a[MAXN];
int n,ans;
priority_queue<rect> q;
priority_queue<rect> d;
bool cmp(rect a,rect b){
return a.s<b.s;
}
struct line{
int pos,ha=-1,di=-1;
}l[MAXN*2];
bool cmpl(line a,line b){
return a.pos<b.pos;
}
signed main(){
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1,j=1;i<=n;i++,j+=2){
cin>>a[i].s>>a[i].t>>a[i].h;
a[i].num=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1,j=1;i<=n;i++,j+=2){
l[j].pos=a[i].s;
l[j+1].pos=a[i].t;
l[j].ha=i;
l[j+1].di=i;
}
sort(l+1,l+2*n+1,cmpl);
// l[2*n+1].pos=l[2*n].pos;
for(int i=1;i<n*2;i++){
if(l[i].ha!=-1){
q.push(a[l[i].ha]);
}
else if(l[i].di!=-1){
d.push(a[l[i].di]);
}
while((!d.empty() and !q.empty())and d.top().num==q.top().num){
q.pop();
d.pop();
}
if(q.empty()){
continue;
}
ans+=(l[i+1].pos-l[i].pos)*q.top().h;
}
cout<<ans;
return 0;
}
样例过了,如果有人能知道哪里有漏洞的话可以告诉我,举反例也好