rt,代码:|
V
#include<bits/stdc++.h>
using namespace std;
#define int long long
int cur,n;
int ls[500000000005ll],rs[500000000005ll],va[500000000005ll],rt;
int node(){
return ++cur;
}
struct valaaa{
int l,r,h;
}val[100000005];
bool cmp(valaaa x,valaaa y){
return x.h<y.h;
}
void add(int p,int l,int r,int s,int t,int d){
if(!p)p=node();
// cout<<"C"<<' '<<p<<' '<<l<<' '<<r<<' '<<s<<' '<<t<<' '<<d<<' '<<va[p]<<endl;
if(l<=s&&r>=t){
va[p]=d;
return;
}
if(!ls[p])ls[p]=node();
if(!rs[p])rs[p]=node();
if(s!=t&&va[p]){
// cout<<'N'<<'#'<<ls[p]<<' '<<rs[p]<<endl;
va[ls[p]]=va[rs[p]]=va[p];
va[p]=0;
// cout<<'N'<<'&'<<ls[p]<<' '<<rs[p]<<endl;
}
int mid=(s+t)>>1;
// cout<<'N'<<' '<<ls[p]<<' '<<rs[p]<<endl;
if(l<=mid)add(ls[p],l,r,s,mid,d);
if(r>mid)add(rs[p],l,r,mid+1,t,d);
}
int query(int p,int l,int r){
// cout<<"Q"<<' '<<p<<' '<<l<<' '<<r<<' '<<va[p]<<endl;
if(!p)return 0;
if(va[p]){
return va[p]*(r-l+1);
}
int mid=(l+r)>>1;
return query(ls[p],l,mid)+query(rs[p],mid+1,r);
}
signed main(){
ios::sync_with_stdio(false);
cin>>n;
rt=node();
for(int i=1;i<=n;i++){
cin>>val[i].l>>val[i].r>>val[i].h;
val[i].r--;
}
sort(val+1,val+n+1,cmp);
for(int i=1;i<=n;i++){
add(rt,val[i].l,val[i].r,1,1<<4,val[i].h);
}
cout<<query(rt,1,1<<4);
}```