Submission #210510

#TimeUsernameProblemLanguageResultExecution timeMemory
210510hanagasumiRailway Trip (JOI17_railway_trip)C++17
20 / 100
2094 ms16496 KiB
#include <iostream> #include <vector> #include <cmath> #include <algorithm> #include <deque> #include <map> #include <set> #include <complex> #include <string> #include <unordered_map> #include <unordered_set> #include <random> #include <chrono> #define ft first #define sc second #define pb push_back #define len(v) (int)v.size() #define int ll using namespace std; typedef long long ll; typedef long double ld; int inf = 1e9 + 100; signed main() { #ifdef PC freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k, q; cin >> n >> k >> q; vector<int> l(n); vector<vector<int>> g(n); for (int i = 0; i < n; i++) { cin >> l[i]; } vector<int> pred(n, -1); vector<int> nxt(n, n); vector<pair<int, int>> have; for (int i = 0; i < n; i++) { while(len(have) > 0 && have.back().ft <= l[i]) have.pop_back(); if(len(have) > 0) pred[i] = have.back().sc; have.pb({l[i], i}); } have.clear(); for (int i = n - 1; i >= 0; i--) { while(len(have) > 0 && have.back().ft <= l[i]) have.pop_back(); if(len(have) > 0) nxt[i] = have.back().sc; have.pb({l[i], i}); } int cnt = 0; for (int i = 0; i < n; i++) { if(i < n - 1) g[i].pb(i + 1); int now = i - 1; while(1) { if(now < 0) break; g[i].pb(now); cnt++; if(l[now] >= l[i]) break; now = pred[now]; } now = i + 1; while(1) { if(now >= n) break; g[i].pb(now); cnt++; if(l[now] >= l[i]) break; now = nxt[now]; } } if(cnt > 5 * n) return -1; for (int i = 0; i < q; i++) { int a, b; cin >> a >> b; a--, b--; unordered_map<int, int> dst; dst[a] = 0; deque<int> q; q.pb(a); while(len(q) > 0) { if(dst.count(b)) break; auto now = q.front(); q.pop_front(); for (auto x : g[now]) { if(dst.count(b)) break; if(dst.count(x)) continue; dst[x] = dst[now] + 1; q.pb(x); } } cout << dst[b] - 1 << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...