Submission #1317533

#TimeUsernameProblemLanguageResultExecution timeMemory
1317533boclobanchatPinball (JOI14_pinball)C++20
11 / 100
1 ms332 KiB
#include<bits/stdc++.h> using namespace std; struct node { int l,mid,r,cost; }; const int MAXN=5e5+5; const long long INF=1e18; long long dpl[MAXN],dpr[MAXN],seg[MAXN*4]; int val[MAXN]; node A[MAXN]; void update(int l,int r,int i,long long val,int pos) { if(i<l||r<i) return ; if(l==r) { seg[pos]=min(seg[pos],val); return ; } int mid=(l+r)/2; update(l,mid,i,val,pos*2); update(mid+1,r,i,val,pos*2+1); seg[pos]=min(seg[pos*2],seg[pos*2+1]); } long long get(int l,int r,int u,int v,int pos) { if(u<=l&&r<=v) return seg[pos]; int mid=(l+r)/2; if(v<=mid) return get(l,mid,u,v,pos*2); if(mid+1<=u) return get(mid+1,r,u,v,pos*2+1); return min(get(l,mid,u,v,pos*2),get(mid+1,r,u,v,pos*2+1)); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int m,n; cin>>n>>m; int cnt=0; val[++cnt]=1,val[++cnt]=m,val[++cnt]=m+1; A[1]={1,1,1,0}; A[2]={m,m,m,0}; for(int i=3;i<=n+2;i++) { int l,mid,r,cost; cin>>l>>r>>mid>>cost; val[++cnt]=l,val[++cnt]=mid,val[++cnt]=mid+1,val[++cnt]=r+1; A[i]={l,mid,r,cost}; } sort(val+1,val+cnt+1); int cc=0; for(int i=1;i<=cnt;i++) if(val[i]!=val[cc]) val[++cc]=val[i]; for(int i=1;i<=n+2;i++) { A[i].l=lower_bound(val+1,val+cc+1,A[i].l)-val; A[i].mid=lower_bound(val+1,val+cc+1,A[i].mid)-val; A[i].r=lower_bound(val+1,val+cc+1,A[i].r+1)-val-1; } for(int i=1;i<=cc*4;i++) seg[i]=INF; for(int i=1;i<=n+2;i++) if(i==1) update(1,cc,A[i].mid,dpl[i]=0,1); else update(1,cc,A[i].mid,dpl[i]=get(1,cc,A[i].l,A[i].mid,1)+A[i].cost,1); for(int i=1;i<=cc*4;i++) seg[i]=INF; for(int i=1;i<=n+2;i++) if(i==2) update(1,cc,A[i].mid,dpr[i]=0,1); else update(1,cc,A[i].mid,dpr[i]=get(1,cc,A[i].mid,A[i].r,1)+A[i].cost,1); long long ans=INF; for(int i=1;i<=n+2;i++) ans=min(ans,dpl[i]+dpr[i]-A[i].cost); if(ans==INF) cout<<-1; else cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...