Submission #899753

#TimeUsernameProblemLanguageResultExecution timeMemory
899753MilosMilutinovicRailway Trip (JOI17_railway_trip)C++14
20 / 100
2057 ms10108 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, k, q; cin >> n >> k >> q; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } vector<vector<int>> g(n); vector<int> stk; for (int i = 0; i < n; i++) { while (!stk.empty() && a[stk.back()] < a[i]) { stk.pop_back(); } if (!stk.empty()) { g[i].push_back(stk.back()); g[stk.back()].push_back(i); } stk.push_back(i); } for (int i = n - 1; i >= 0; i--) { while (!stk.empty() && a[stk.back()] < a[i]) { stk.pop_back(); } if (!stk.empty()) { g[i].push_back(stk.back()); g[stk.back()].push_back(i); } stk.push_back(i); } while (q--) { int a, b; cin >> a >> b; --a; --b; vector<int> dist(n, -1); vector<int> que(1, a); dist[a] = 0; for (int b = 0; b < (int) que.size(); b++) { int x = que[b]; for (int y : g[x]) { if (dist[y] == -1) { dist[y] = dist[x] + 1; que.push_back(y); } } } cout << dist[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...