#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5;
int num_dev,n;
int a[N+2],b[N+2],c[N+2],d[N+2];
int start_point,end_point;
vector<int>nen;
int Find(vector<int>&x,int val){
return upper_bound(x.begin(),x.end(),val)-x.begin();
}
void compress(){
nen.push_back(1),nen.push_back(n);
for(int i=1;i<=num_dev;++i) {
nen.push_back(a[i]);
nen.push_back(c[i]);
nen.push_back(b[i]);
}
sort(nen.begin(),nen.end());
nen.resize(unique(nen.begin(),nen.end())-nen.begin());
for(int i=1;i<=num_dev;++i){
a[i]=Find(nen,a[i]);
b[i]=Find(nen,b[i]);
c[i]=Find(nen,c[i]);
}
start_point=Find(nen,1);
end_point=Find(nen,n);
return;
}
const LL INF=(LL)1e18;
class IT{
public:
vector<LL>st;
#define lef(id) id*2
#define rig(id) id*2+1
void init(int _n){
st.assign(_n*4+2,INF);
}
void upd(int id,int l,int r,int pos,LL val){
if (l>pos||r<pos) return;
if (l==r) st[id]=min(st[id],val);
else{
int m=(l+r)/2;
upd(lef(id),l,m,pos,val);
upd(rig(id),m+1,r,pos,val);
st[id]=min(st[lef(id)],st[rig(id)]);
}
}
LL get(int id,int l,int r,int u,int v){
if (l>v||r<u) return INF;
if (u<=l&&r<=v) return st[id];
int m=(l+r)/2;
return min(get(lef(id),l,m,u,v),get(rig(id),m+1,r,u,v));
}
};
#define left asdasd
#define right asdasdd
IT left,right;
int main(){
ios::sync_with_stdio(false);
cin.tie(0) ; cout.tie(0);
cin>>num_dev>>n;
for(int i=1;i<=num_dev;++i){
cin>>a[i]>>b[i]>>c[i]>>d[i];
}
compress();
left.init(nen.size()),right.init(nen.size());
LL ans=INF;
left.upd(1,1,nen.size(),start_point,0);
right.upd(1,1,nen.size(),end_point,0);
for(int i=1;i<=num_dev;++i){
LL lef=left.get(1,1,nen.size(),a[i],b[i]);
LL rig=right.get(1,1,nen.size(),a[i],b[i]);
ans=min(ans,lef+rig+d[i]);
left.upd(1,1,nen.size(),c[i],lef+d[i]);
right.upd(1,1,nen.size(),c[i],rig+d[i]);
}
cout<<(ans==INF?-1:ans);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |