Submission #76347

#TimeUsernameProblemLanguageResultExecution timeMemory
76347VasiljkoPinball (JOI14_pinball)C++14
51 / 100
480 ms17756 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = 1e9+7; const ll INF = 1e18+10; const int N = 1e5+5; int m; ll n,a[N],b[N],c[N],d[N],dpl[N],dpr[N],tree[4*N]; unordered_map<ll,int>mp; vector<ll>v; void resetTree(){ for(int i=0;i<4*N;i++)tree[i]=INF; } void Set(int c,ll ss,ll se,ll ind,ll val){ if(ss==se){ tree[c]=min(tree[c],val); return; } ll mid=(ss+se)>>1LL; if(ind<=mid)Set(c<<1,ss,mid,ind,val); else Set(c<<1|1,mid+1,se,ind,val); tree[c]=min(tree[c<<1],tree[c<<1|1]); } ll Get(int c,ll ss,ll se,ll qs,ll qe){ if(qs>se||qe<ss||ss>se)return INF; if(qs<=ss&&se<=qe)return tree[c]; ll mid=(ss+se)>>1LL; return min(Get(c<<1,ss,mid,qs,qe),Get(c<<1|1,mid+1,se,qs,qe)); } int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>m>>n; for(int i=1;i<=m;i++){ cin>>a[i]>>b[i]>>c[i]>>d[i]; v.push_back(a[i]); v.push_back(b[i]); v.push_back(c[i]); } sort(v.begin(),v.end()); int cnt=0; ll prev=-1; for(auto e:v){ if(e!=prev)cnt++; mp[e]=cnt; prev=e; } ll ans=2LL*INF; resetTree(); for(int i=1;i<=m;i++){ if(a[i]==1){ dpl[i]=d[i]; Set(1,1,cnt,mp[c[i]],dpl[i]); }else{ dpl[i]=INF; dpl[i]=min(dpl[i],d[i]+Get(1,1,cnt,mp[a[i]],mp[b[i]])); Set(1,1,cnt,mp[c[i]],dpl[i]); } } resetTree(); for(int i=1;i<=m;i++){ if(b[i]==n){ dpr[i]=d[i]; Set(1,1,cnt,mp[c[i]],dpr[i]); }else{ dpr[i]=INF; dpr[i]=min(dpr[i],d[i]+Get(1,1,cnt,mp[a[i]],mp[b[i]])); Set(1,1,cnt,mp[c[i]],dpr[i]); } } for(int i=1;i<=m;i++)ans=min(ans,dpl[i]+dpr[i]-d[i]); if(ans==INF)ans=-1; cout<<ans; 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...