Submission #210484

#TimeUsernameProblemLanguageResultExecution timeMemory
210484hanagasumiRailway Trip (JOI17_railway_trip)C++17
0 / 100
332 ms524292 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().sc <= l[i]) have.pop_back(); if(len(have) > 0) nxt[i] = have.back().sc; have.pb({l[i], i}); } 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); if(l[now] >= l[i]) break; now = pred[now]; } now = i + 1; while(1) { if(now >= n) break; g[i].pb(now); if(l[now] >= l[i]) break; now = nxt[now]; } } vector<vector<int>> dst(n, vector<int> (n, inf)); for (int i = 0; i < n; i++) { dst[i][i] = 0; deque<int> q; q.pb(i); while(len(q) > 0) { auto now = q.front(); q.pop_front(); for (auto x : g[now]) { if(dst[i][x] != inf) continue; dst[i][x] = dst[i][now] + 1; q.pb(x); } } } for (int i = 0; i < q; i++) { int a, b; cin >> a >> b; a--, b--; cout << dst[a][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...