제출 #744736

#제출 시각아이디문제언어결과실행 시간메모리
744736t6twotwoRainforest Jumps (APIO21_jumps)C++17
0 / 100
4010 ms12228 KiB
#include "jumps.h" #include <bits/stdc++.h> using namespace std; int N; vector<int> H, G; bool subtask1; vector<vector<int>> adj; void init(int n, vector<int> h) { N = n, H = h; subtask1 = 1; for (int i = 0; i < N; i++) { H[i]--; if (i != H[i]) { subtask1 = 0; } } G.resize(N); for (int i = 0; i < N; i++) { G[H[i]] = i; } adj.resize(N); for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { if (G[j] > G[i]) { adj[i].push_back(j); break; } } for (int j = i + 1; j < N; j++) { if (G[j] < G[i]) { adj[i].push_back(j); break; } } } } int minimum_jumps(int A, int B, int C, int D) { if (subtask1) { return C - B; } vector<int> dis(N, -1); queue<int> q; for (int i = A; i <= B; i++) { dis[H[i]] = 0; q.push(H[i]); } while (!q.empty()) { int x = q.front(); q.pop(); if (C <= G[x] && G[x] <= D) { return dis[x]; } for (int y : adj[x]) { if (dis[y] == -1) { dis[y] = dis[x] + 1; q.push(y); } } } return -1; }
#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...