Submission #925007

#TimeUsernameProblemLanguageResultExecution timeMemory
925007TAhmed33밀림 점프 (APIO21_jumps)C++17
33 / 100
4097 ms5072 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 25; int a[MAXN], nxt[MAXN], prv[MAXN]; int n; void init (int N, vector <int> h) { n = N; for (int i = 0; i < n; i++) a[i] = h[i]; stack <int> cur; cur.push(0); for (int i = 1; i < n; i++) { while (!cur.empty() && a[i] > a[cur.top()]) { nxt[cur.top()] = i; cur.pop(); } cur.push(i); } while (!cur.empty()) { nxt[cur.top()] = -1; cur.pop(); } cur.push(n - 1); for (int i = n - 2; i >= 0; i--) { while (!cur.empty() && a[i] > a[cur.top()]) { prv[cur.top()] = i; cur.pop(); } cur.push(i); } while (!cur.empty()) { prv[cur.top()] = -1; cur.pop(); } } int minimum_jumps (int a, int b, int c, int d) { int dist[n]; for (int i = 0; i < n; i++) dist[i] = n + 1; queue <int> cur; for (int i = a; i <= b; i++) { dist[i] = 0; cur.push(i); } while (!cur.empty()) { auto k = cur.front(); cur.pop(); if (nxt[k] != -1) { if (dist[nxt[k]] == n + 1) { dist[nxt[k]] = dist[k] + 1; cur.push(nxt[k]); } } if (prv[k] != -1) { if (dist[prv[k]] == n + 1) { dist[prv[k]] = dist[k] + 1; cur.push(prv[k]); } } } int mn = n + 1; for (int i = c; i <= d; i++) mn = min(mn, dist[i]); if (mn == n + 1) return -1; return mn; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...