Submission #1365554

#TimeUsernameProblemLanguageResultExecution timeMemory
1365554settopRainforest Jumps (APIO21_jumps)C++20
33 / 100
4075 ms13748 KiB
#include "jumps.h"
#include<bits/stdc++.h>
using namespace std;

#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
#define pb push_back
const int MAXN=2e5+10;

int n;
vector<int> g[MAXN];

void init(int N, std::vector<int> H) {
  n=N;
  stack<int> st;
  fall(i,0,n-1){
    while(sz(st)){
      auto x=st.top();
      if(H[x]>H[i]) break;
      st.pop();
    }
    if(sz(st)) g[i].pb(st.top());
    st.push(i);
  }
  while(sz(st)) st.pop();
  rfall(i,n-1,0){
    while(sz(st)){
      auto x=st.top();
      if(H[x]>H[i]) break;
      st.pop();
    }
    if(sz(st)) g[i].pb(st.top());
    st.push(i);
  }
}

int minimum_jumps(int A, int B, int C, int D){
  vector<int> dp(n,n+10);
  fall(i,A,B) dp[i]=0;
  queue<int> fila; fall(i,A,B) fila.push(i);
  while(sz(fila)){
    auto x=fila.front(); fila.pop();
    if(x>=C && x<=D) return dp[x];
    for(auto u:g[x]) if(dp[u]==n+10){dp[u]=dp[x]+1;fila.push(u);}
  }
  return -1;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...