Submission #737345

#TimeUsernameProblemLanguageResultExecution timeMemory
737345bobthebuilderSky Walking (IOI19_walk)C++17
24 / 100
873 ms607236 KiB
#include "walk.h" #include<bits/stdc++.h> using namespace std; #define sz(x) (int)x.size() #define REP(i,n) for(int i=0;i<n;i++) #define REP1(i,n) for(int i=1;i<=n;i++) #define pb push_back #define lowb(x) (x&(-x)) #define ALL(_x) _x.begin(),_x.end() #define pii pair<ll,int> #define f first #define s second #define SORT_UNIQUE(x) sort(ALL(x)),x.erase(unique(ALL(x)),x.end()) #define ll long long const ll INF64=4e18; const int maxn=2e6+5; vector<pii> gr[maxn]; void add(int a,int b,int w){ gr[a].pb({b,w}),gr[b].pb({a,w}); } vector<pii> pts[maxn]; ll dist[maxn]; long long min_distance(std::vector<int> xx, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int s, int g) { int n=sz(xx),m=sz(l); vector<pii> v; REP(i,n){ v.pb({h[i],i}); pts[i].pb({0,i}); } vector<pii> vv; sort(ALL(v)); REP(i,m){ vv.pb({y[i],i}); } sort(ALL(vv)); int p=0; set<int> ss; REP(i,n) ss.insert(i); int cur=n; for(auto x:vv){ while(p<n and v[p].f<x.f){ ss.erase(v[p].s); ++p; } int a=l[x.s],b=r[x.s]; ss.insert(a),ss.insert(b); auto it=ss.lower_bound(a); int pp=-1; vector<int> del; while(it!=ss.end() and (*it)<=b){ int z=(*it); auto pv=pts[z].back(); add(pv.s,cur,x.f-pv.f); pts[z].pb({x.f,cur}); if(pp!=-1) add(cur-1,cur,xx[z]-xx[pp]); pp=z; ++cur; if(z!=a and z!=b){ del.pb(z); } ++it; } //if(s==0 and g==n-1) for(int x:del) ss.erase(x); } REP(i,cur) dist[i]=INF64; priority_queue<pii,vector<pii>,greater<pii>> pq; pq.push({0,s}); dist[s]=0; while(sz(pq)){ int z=pq.top().s; if(pq.top().f>dist[z]){ pq.pop(); continue; } pq.pop(); for(auto x:gr[z]){ if(dist[x.f]>dist[z]+x.s){ dist[x.f]=dist[z]+x.s; pq.push({dist[x.f],x.f}); } } } if(dist[g]==INF64) dist[g]=-1; return dist[g]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...