Submission #1236317

#TimeUsernameProblemLanguageResultExecution timeMemory
1236317AMel0nRainforest Jumps (APIO21_jumps)C++20
37 / 100
4041 ms17556 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define FOR(i,N) for(ll i = 0; i < N; i++) #define all(x) (x).begin(), (x).end() #define F first #define S second #include "jumps.h" int N; vector<int> H; vector<vector<int>> g; bool sub1 = true; void init(int N, std::vector<int> H) { ::N = N; ::H = H; g.resize(N); stack<int> stk; FOR(i, N) { while(stk.size() && H[stk.top()] <= H[i]) stk.pop(); if (stk.size()) g[i].push_back(stk.top()); stk.push(i); } while(stk.size()) stk.pop(); for(int i = N-1; i >= 0; i--) { while(stk.size() && H[stk.top()] <= H[i]) stk.pop(); if (stk.size()) g[i].push_back(stk.top()); stk.push(i); } FOR(i, N-1) if (H[i] >= H[i+1]) sub1 = false; } int minimum_jumps(int A, int B, int C, int D) { if (sub1) return C-B; priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>> > pq; vector<int> vis(N, 1e9); for(int i = A; i <= B; i++) { pq.push({0, i}); vis[i] = 0; } while(pq.size()) { int d = pq.top().F; int u = pq.top().S; pq.pop(); if (vis[u] != d) continue; for(int v: g[u]) { if (vis[v] > d+1) { pq.push({d+1, v}); vis[v] = d+1; } } } int res = 1e9; for(int i = C; i <= D; i++) { res = min(res, vis[i]); } return (res == 1e9) ? -1 : res; }
#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...