Submission #598593

#TimeUsernameProblemLanguageResultExecution timeMemory
598593yutabiSky Walking (IOI19_walk)C++14
24 / 100
2548 ms1048576 KiB
#include "walk.h" #include <bits/stdc++.h> using namespace std; #define INF 1000000000000000007 #define pb push_back typedef long long ll; typedef pair <ll,ll> ii; vector <vector <ii> > graph; vector <ll> res; priority_queue <ii> pq; vector <bool> v; long long min_distance(std::vector<int> x, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int s, int g) { ll n=x.size(); ll m=l.size(); vector <ii> last_added(n,ii(-1,-1)); ll k=0; vector <ii> build; vector <pair <ll,ii> > sky; for(ll i=0;i<n;i++) { build.pb(ii(h[i],i)); } for(ll i=0;i<m;i++) { sky.pb(make_pair(y[i],ii(l[i],r[i]))); } sort(build.begin(),build.end()); sort(sky.rbegin(),sky.rend()); set <ll> builds; for(ll i=0;i<m;i++) { while(build.size() && build.back().first>=sky[i].first) { builds.insert(build.back().second); build.pop_back(); } auto it=builds.lower_bound(sky[i].second.first); ll last=*it; ll height=sky[i].first; graph.pb({}); res.pb(-1); v.pb(0); if(last_added[last].first!=-1) { graph[last_added[last].first].pb(ii(k,last_added[last].second-height)); graph[k].pb(ii(last_added[last].first,last_added[last].second-height)); } last_added[last]=ii(k,height); k++; it++; while(it!=builds.end() && *it<=sky[i].second.second) { ll curr=*it; graph.pb({}); res.pb(-1); v.pb(0); graph[k-1].pb(ii(k,x[curr]-x[last])); graph[k].pb(ii(k-1,x[curr]-x[last])); if(last_added[curr].first!=-1) { graph[last_added[curr].first].pb(ii(k,last_added[curr].second-height)); graph[k].pb(ii(last_added[curr].first,last_added[curr].second-height)); } last_added[curr]=ii(k,height); k++; last=curr; it++; } } ll start_index; ll end_index; for(ll i=0;i<n;i++) { graph.pb({}); res.pb(-1); v.pb(0); if(last_added[i].first!=-1) { graph[last_added[i].first].pb(ii(k,last_added[i].second-0)); graph[k].pb(ii(last_added[i].first,last_added[i].second-0)); } if(s==i) { start_index=k; } if(g==i) { end_index=k; } k++; } pq.push(ii(0,start_index)); while(pq.size()) { int index=pq.top().second; ll dist=-pq.top().first; pq.pop(); if(v[index]) { continue; } res[index]=dist; v[index]=1; for(int i=0;i<graph[index].size();i++) { if(v[graph[index][i].first]==0) { pq.push(ii(-(dist+graph[index][i].second),graph[index][i].first)); } } } return res[end_index]; }

Compilation message (stderr)

walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:162:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  162 |   for(int i=0;i<graph[index].size();i++)
      |               ~^~~~~~~~~~~~~~~~~~~~
walk.cpp:172:22: warning: 'end_index' may be used uninitialized in this function [-Wmaybe-uninitialized]
  172 |  return res[end_index];
      |                      ^
#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...