제출 #1178051

#제출 시각아이디문제언어결과실행 시간메모리
1178051Muhammet밀림 점프 (APIO21_jumps)C++20
37 / 100
4008 ms15276 KiB
#include "bits/stdc++.h" #include "jumps.h" // #include "stub.cpp" using namespace std; #define SZ(s) (int)s.size() const int N = 2e5 + 5; int n; vector <int> h, v[N]; bool tr; void init(int N1, vector<int> H) { n = N1, h = H; vector <int> v1; for(int i = 0; i < n; i++) { while(SZ(v1) and h[v1.back()] < h[i]) { v1.pop_back(); } if(SZ(v1)) v[i].push_back(v1.back()); v1.push_back(i); } v1.clear(); for(int i = n-1; i >= 0; i--) { while(SZ(v1) and h[v1.back()] < h[i]) { v1.pop_back(); } if(SZ(v1)) v[i].push_back(v1.back()); v1.push_back(i); } for(int i = 1; i < n; i++) { if(h[i] < h[i-1]) tr = 1; } return; } int minimum_jumps(int a, int b, int c, int d) { if(!tr) return (c - b); queue <pair <int, int>> q; vector <int> vis(n+1, 0); for(int i = a; i <= b; i++) { q.push({i, 0}); vis[i] = true; } int ans = 1e9; while(!q.empty()) { auto [x, s] = q.front(); q.pop(); if(c <= x and x <= d) ans = min(ans, s); for(auto i : v[x]) { if(vis[i]) continue; q.push({i, s + 1}); vis[i] = true; } } return (ans == 1e9 ? -1 : ans); }
#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...