Submission #1304244

#TimeUsernameProblemLanguageResultExecution timeMemory
1304244KietJRailway Trip (JOI17_railway_trip)C++20
20 / 100
2095 ms9944 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> ii; #define fi first #define se second #define all(x) x.begin(), x.end() #define sz(x) (int)(x.size()) #define MASK(i) (1ll << i) #define debug cout << "[Debug line] " << __LINE__ << ": " const int N = 2e5 + 5; const int M = 2e3 + 5; const int INF = INT_MAX; int n, k, q; ii qry[N]; int a[N]; vector<int> g[N]; namespace sub12 { bool check() { return ((n <= 100 && q <= 50 && k <= 100) || q <= 50); } int d[N], prv[N], nxt[N]; bool vis[N]; void bfs(int s) { for (int i = 1; i <= n; i++) { vis[i] = false, d[i] = INF; } d[s] = 0; vis[s] = true; queue<int> qe; qe.push(s); while (!qe.empty()) { int u = qe.front(); qe.pop(); for (int v : g[u]) { if (!vis[v]) { d[v] = d[u] + 1; vis[v] = true; qe.push(v); } } } } void solve() { stack<int> st; for (int i = 1; i <= n; i++) { while (!st.empty() && a[st.top()] < a[i]) st.pop(); prv[i] = (st.empty()) ? -1 : st.top(); st.push(i); } while (sz(st)) st.pop(); for (int i = n; i >= 1; i--) { while (!st.empty() && a[st.top()] < a[i]) st.pop(); nxt[i] = (st.empty() ? -1 : st.top()); st.push(i); } for (int i = 1; i <= n; i++) { int l = prv[i], r = nxt[i]; if (l != -1) { g[i].push_back(l); if (a[l] > a[i]) g[l].push_back(i); } if (r != -1) { g[i].push_back(r); if (a[r] > a[i]) g[r].push_back(i); } } for (int i = 1; i <= q; i++) { int u = qry[i].fi, v = qry[i].se; bfs(u); cout << d[v] - 1 << '\n'; } } } void solve() { cin >> n >> k >> q; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= q; i++) { int u, v; cin >> u >> v; qry[i] = {u, v}; } sub12::solve(); return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #define TASK "PERMATRIX" // freopen(TASK".inp", "r", stdin); // freopen(TASK".out", "w", stdout); int T = 1; // cin >> T; while (T--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...