#include "jumps.h"
#include <vector>
#include <stack>
#include <cstdio>
#include <queue>
using namespace std;
int n;
vector<int> h, dist;
vector<bool> vis;
vector<vector<int>> adj;
void create_graph() {
stack<int> s;
for (int i = 0; i < n; i++) {
while (s.size() > 0 && h[i] > h[s.top()]) {
adj[s.top()].push_back(i);
s.pop();
}
s.push(i);
}
while (s.size() > 0) s.pop();
for (int i = n-1; i >= 0; i--) {
while (s.size() > 0 && h[i] > h[s.top()]) {
adj[s.top()].push_back(i);
s.pop();
}
s.push(i);
}
}
void print_graph() {
for (int i = 0; i < n; i++) {
printf("%d: ", i);
for (auto u: adj[i]) printf("%d ", u);
printf("\n");
}
}
void bfs() {
for (int i = 0; i < n+2; i++) dist[i] = 1e9;
for (int i = 0; i < n+2; i++) vis[i] = false;
queue<int> q;
q.push(n);
dist[n] = 0;
while (!q.empty()) {
int cur = q.front();
q.pop();
if (vis[cur]) continue;
vis[cur] = true;
for (auto u: adj[cur]) {
q.push(u);
dist[u] = min(dist[u], dist[cur]+1);
}
}
}
void print_dist() {
for (int i = 0; i < n+2; i++) {
printf("%d -> %d\n", i, dist[i]);
}
}
void init(int Num, vector<int> Height) {
n = Num;
h = Height;
adj.resize(n+2); // place n is fake out and place n+1 is fake in
dist.resize(n+2);
vis.resize(n+2);
create_graph();
// print_graph();
}
int minimum_jumps(int a, int b, int c, int d) {
for (int i = a; i <= b; i++) adj[n].push_back(i);
for (int i = c; i <= d; i++) adj[i].push_back(n+1);
bfs();
// print_dist();
adj[n].clear();
for (int i = c; i <= d; i++) adj[i].pop_back();
if (dist[n+1] < 1e8) return dist[n+1]-2;
return -1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |