#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> height;
vector<vector<int>> adj;
void init(int N, vector<int> H) {
n = N;
height = H;
}
int bfs(int start, int A, int B, int C, int D) {
queue<pair<int, int>> q;
// vector<bool> vis(n, false);
q.push({start, 0});
int ans = INT_MAX;
while(!q.empty()) {
int u = q.front().first, value = q.front().second;
q.pop();
// if(vis[u]) continue;
// vis[u] = true;
if(u >= C && u <= D) {
ans = min(ans, value);
continue;
}
if(u >= A && u <= B) value = 0;
for(int i = 0; i < adj[u].size(); i++)
q.push({adj[u][i], value+1});
}
return ans;
}
int minimum_jumps(int A, int B, int C, int D) {
// if(sub1()) return C-B;
adj.resize(n);
for(int i = 0; i < n; i++) {
for(int j = i-1; j >= 0; j--) {
if(height[j] > height[i]) {
adj[i].push_back(j);
break;
}
}
for(int j = i+1; j < n; j++) {
if(height[j] > height[i]) {
adj[i].push_back(j);
break;
}
}
}
int pos = 0, mn = INT_MAX;
for(int i = A; i <= B; i++) {
if(mn > height[i])
mn = height[i], pos = i;
}
int ans = bfs(pos, A, B, C, D);
if(ans == INT_MAX) return -1;
return ans;
}
// int main() {
// int N, Q;
// scanf("%d %d", &N, &Q);
// vector<int> H(N);
// for(int i = 0; i < N; i++)
// scanf("%d", &H[i]);
// init(N, H);
// while(Q--) {
// int A, B, C, D;
// scanf("%d %d %d %d", &A, &B, &C, &D);
// printf("%d\n", minimum_jumps(A, B, C, D));
// }
// return 0;
// }
| # | 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... |