Submission #725777

#TimeUsernameProblemLanguageResultExecution timeMemory
725777PixelCatSky Walking (IOI19_walk)C++14
0 / 100
168 ms23544 KiB
#include "walk.h" #ifdef NYAOWO #include "grader.cpp" #endif #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define Forr(i,a, b) for(int i = a; i >= b; i--) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define eb emplace_back #define int LL using namespace std; using LL = long long; using pii = pair<int, int>; using Vi = vector<int32_t>; const int MAXN = 100010; const int INF = 2e9; int n, m; Vi st[MAXN], ed[MAXN]; int solve_1n(Vi x, Vi h, Vi l, Vi r, Vi y) { For(i, 0, m - 1) { st[l[i]].eb(y[i]); ed[r[i]].eb(y[i]); } map<int, int> mp; mp[0] = INF; mp[INF] = INF; for(auto &i:st[0]) mp[i] = i; auto eval = [&](int p, int hei) { auto it1 = mp.upper_bound(p); auto it2 = prev(it1); int res = p - (it2->F) + (it2->S); if(it1->F <= hei) { res = min(res, (it1->F) - p + (it1->S)); } // cout << (it1->F) << " " << (it1->S) << "\n"; // cout << (it2->F) << " " << (it2->S) << "\n"; return res; }; For(i, 1, n - 2) { set<int> upd; for(auto &j:st[i]) { int k = eval(j, h[i]); mp[j] = k; upd.insert(j); } for(auto &j:ed[i]) if(!upd.count(j)) { mp.erase(j); } } // cout << "\n"; // for(auto &p:mp) cout << p.F << " " << p.S << "\n"; // cout << "\n"; int ans = eval(0, h[n - 1]) + x.back() - x[0]; if(ans >= INF) return -1; return ans; } long long min_distance(Vi x, Vi h, Vi l, Vi r, Vi y, int32_t s, int32_t g) { n = sz(x); m = sz(l); return solve_1n(x, h, l, r, y); }
#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...