제출 #1174996

#제출 시각아이디문제언어결과실행 시간메모리
1174996JohanRainforest Jumps (APIO21_jumps)C++20
21 / 100
4043 ms17128 KiB
#include "jumps.h" #include "bits/stdc++.h" using namespace std; const int MAX = 3e5 + 6; const int LOG = 25; const int inf = 1e9; const int mod = 1e9 + 7; const int block = 333; // mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); queue < int > q; vector < int > d(MAX, -1); vector < vector < int > > adj(MAX); void fix(){ d.assign(MAX, -1); while(q.size()) q.pop(); } void bfs(){ while(q.size()){ int v = q.front(); q.pop(); for(auto u : adj[v]){ if(d[u] == -1){ q.push(u); d[u] = d[v] + 1; } } } } void init(int N, vector<int> H) { int n = N; vector < int > h = H; for(int i = 0; i < n; i++){ for(int j = i - 1; j >= 0; j--){ if(h[j] > h[i]){ adj[i].push_back(j); break; } } for(int j = i + 1; j < n; j++){ if(h[j] > h[i]){ adj[i].push_back(j); break; } } } } int minimum_jumps(int A, int B, int C, int D){ fix(); for(int i = A; i <= B; i++){ d[i] = 0; q.push(i); } bfs(); int mn = inf; for(int i = C; i <= D; i++){ if(d[i] == -1) continue; mn = min(mn, d[i]); } return (mn == inf ? -1 : mn); } // signed main(){ // int n, q; // cin >> n >> q; // vector < int > a(n); // for(int i = 0; i < n; i++) // cin >> a[i]; // init(n, a); // while(q--){ // int a, b, c, d; // cin >> a >> b >> c >> d; // cout << minimum_jumps(a, b, c, d) << endl; // } // }
#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...