제출 #1167283

#제출 시각아이디문제언어결과실행 시간메모리
1167283adriannok밀림 점프 (APIO21_jumps)C++20
33 / 100
4099 ms15268 KiB
#include "jumps.h" #include <bits/stdc++.h> using namespace std; int N; vector<int> H; vector<int> sorted; vector< vector<int> > adj; void init(int n, vector<int> h) { N = n; H = h; adj.resize( N ); vector<int> ind(N+1); { stack<int> closest; for(int i = 0; i < N; ++i) { ind[H[i]] = i; while(!closest.empty() && closest.top() < H[i]) closest.pop(); if( !closest.empty() ) { adj[i].push_back( ind[closest.top()] ); } closest.push( H[i] ); } } stack<int> closest; for(int i = N-1; i >= 0; --i) { while(!closest.empty() && closest.top() < H[i]) closest.pop(); if( !closest.empty() ) { adj[i].push_back( ind[closest.top()] ); } closest.push( H[i] ); } } int minimum_jumps(int A, int B, int C, int D) { int minJ = N+1; queue<int> q; vector<int> distance(N, N+1); for(int i = A; i <= B; ++i) { q.push(i); distance[i] = 0; } while(!q.empty()) { int u = q.front(); q.pop(); if( C <= u && u <= D) minJ = min(minJ, distance[u]); for(const int& v : adj[u]) { if(distance[v] <= distance[u] + 1) continue; distance[v] = distance[u] + 1; q.push(v); } } if(minJ == N+1) minJ = -1; return minJ; }
#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...