| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 948427 | vjudge1 | Rainforest Jumps (APIO21_jumps) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "jumps.h"
#include "stub.cpp"
#include <bits/stdc++.h>
#define pb push_back
#define ll long long
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
using namespace std;
const int N=2e5+5;
vector<int> g[N];
int n;
void init(int n_, vector<int> a){
n=n_;
stack<int> A;
for(int i=0;i<n;i++){
while(!A.empty() && a[A.top()]<a[i]) A.pop();
if(!A.empty()) g[i].pb(A.top());
A.push(i);
}
while(!A.empty()) A.pop();
for(int i=n-1;i>=0;i--){
while(!A.empty() && a[A.top()]<a[i]) A.pop();
if(!A.empty()) g[i].pb(A.top());
A.push(i);
}
}
int minimum_jumps(int A, int B, int C, int D) {
queue< pair <int,int> > dq;
vector<bool> used(n);
for(int i=A;i<=B;i++){
dq.push(make_pair(i,0));
}
int ans=1e9;
while(!dq.empty()){
int x=dq.front().fr;
int d=dq.front().sc;
dq.pop();
if(C<=x && x<=D) ans=min(ans,d);
for(auto it: g[x]){
if(!used[it]){
used[it]=1;
dq.push(make_pair(it,d+1));
}
}
}
if(ans==1e9) ans=-1;
//cout<<ans<<endl;
return ans;
}
