Submission #986391

#TimeUsernameProblemLanguageResultExecution timeMemory
986391PyqeRoller Coaster Railroad (IOI16_railroad)C++17
100 / 100
121 ms36908 KiB
#include <bits/stdc++.h> #include "railroad.h" using namespace std; #define mp make_pair #define fr first #define sc second const long long ma=1e9; long long n,dsu[400069]; pair<long long,pair<long long,long long>> as[400069],ed[400069]; pair<long long,long long> pst[200069]; long long fd(long long x) { if(dsu[x]!=x) { dsu[x]=fd(dsu[x]); } return dsu[x]; } long long plan_roller_coaster(vector<int> ka,vector<int> la) { long long i,k,l,w,c=0,z=0; n=ka.size()+1; for(i=1;i<=n;i++) { if(i<n) { k=ka[i-1]; l=la[i-1]; } else { k=ma+1; l=0; } z+=l-k; as[i*2-1]={k,{i,1}}; as[i*2]={l,{i,-1}}; } sort(as+1,as+n*2+1); for(i=1;i<=n*2;i++) { k=as[i].fr; l=as[i].sc.fr; w=as[i].sc.sc; z+=(k-as[i-1].fr)*abs(c); dsu[i]=i; if(c) { dsu[fd(i-1)]=fd(i); } c+=w; pst[l].fr=i; swap(pst[l].fr,pst[l].sc); } for(i=1;i<=n;i++) { k=pst[i].fr; l=pst[i].sc; dsu[fd(l)]=fd(k); } for(i=1;i<n*2;i++) { ed[i]={(as[i+1].fr-as[i].fr)*2,{fd(i),fd(i+1)}}; } sort(ed+1,ed+n*2); for(i=1;i<n*2;i++) { w=ed[i].fr; k=ed[i].sc.fr; l=ed[i].sc.sc; z+=w*(fd(k)!=fd(l)); dsu[fd(l)]=fd(k); } z/=2; return z; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...