제출 #1075594

#제출 시각아이디문제언어결과실행 시간메모리
1075594MOUF_MAHMALAT치료 계획 (JOI20_treatment)C++14
4 / 100
135 ms54356 KiB
#include <bits/stdc++.h> #define all(v) v.begin(),v.end() #define F first #define S second #define mid ((l+r)>>1) using namespace std; typedef long long ll; typedef pair<ll,ll>pll; const ll oo= 1e5+9; const ll inf=1e18; struct node { ll t,l,r,c; } a[oo]; struct seg { seg *l=0,*r=0; ll mn=inf; }*root; bool cmp(const node&A,const node&B) { return A.r < B.r; } ll n,m; void up(seg*&d,ll l,ll r,ll id,ll val) { if(l==r) return void(d-> mn = min(d->mn ,val)); if(id<=mid) { if(d->l==0) d->l = new seg; up(d->l,l,mid,id,val); } else { if(d->r==0) d->r = new seg; up(d->r,mid+1,r,id,val); } d-> mn = inf; if(d->l!=0) d->mn = d->l->mn; if(d->r!=0) d->mn = min(d->mn,d->r->mn); } ll best(seg*&d,ll l,ll r,ll lx) { if(d==0||r<lx) return inf; if(lx<=l) return d->mn; return min(best(d->l,l,mid,lx),best(d->r,mid+1,r,lx)); } void solve() {root = new seg(); cin>>n>>m; for(ll i=0; i<m; i++) { cin>>a[i].t>>a[i].l>>a[i].r>>a[i].c; } sort(a,a+m,cmp); ll ans=inf; up(root,0,n,0,0); for(ll i=0; i<m; i++) { ll x= a[i].c + best(root,0,n,a[i].l-1); if(a[i].r==n) ans=min(ans,x); up(root,0,n,a[i].r,x); } if(ans>=inf) cout<<-1; else cout<<ans; } int main() { ios::sync_with_stdio(0),cin.tie(0); ll tt=1; // cin>>tt; while(tt--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...