제출 #1223374

#제출 시각아이디문제언어결과실행 시간메모리
1223374KALARRYRainforest Jumps (APIO21_jumps)C++20
33 / 100
4088 ms6040 KiB
//chockolateman #include<bits/stdc++.h> using namespace std; int n,l[200005],r[200005],dist[200005]; bool used[200005]; void init(int N, std::vector<int> H) { n = N; stack<pair<int,int>> order; order.push({1e9,0}); for(int i = 1 ; i <= N ; i++) { while(H[i-1] > order.top().first) order.pop(); l[i] = order.top().second; order.push({H[i-1],i}); } while(!order.empty()) order.pop(); order.push({1e9,N+1}); for(int i = N ; i >= 1 ; i--) { while(H[i-1] > order.top().first) order.pop(); r[i] = order.top().second; order.push({H[i-1],i}); } } void BFS(vector<int> starts) { memset(used,false,sizeof(used)); queue<int> q; for(auto x : starts) { used[x] = true; dist[x] = 0; q.push(x); } while(!q.empty()) { int v = q.front(); q.pop(); for(int u,k = 0 ; k <= 1 ; k++) { if(k==0) u = l[v]; else u = r[v]; if(1 <= u && u <= n && !used[u]) { used[u] = true; dist[u] = dist[v] + 1; q.push(u); } } } } int minimum_jumps(int A, int B, int C, int D) { A++; B++; C++; D++; int ret = 1e9; vector<int> starts; for(int i = A ; i <= B ; i++) starts.push_back(i); BFS(starts); for(int i = C ; i <= D ; i++) if(used[i]) ret = min(ret,dist[i]); if(ret > n) ret = -1; return ret; }
#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...