Submission #1035280

#TimeUsernameProblemLanguageResultExecution timeMemory
1035280_8_8_Rainforest Jumps (APIO21_jumps)C++17
0 / 100
139 ms15436 KiB
#include "jumps.h"

#include <vector>
#include <bits/stdc++.h>
using namespace std;

const int B = 20;
int n;
vector<vector<int>> build(vector<vector<int>> g,vector<int>rt){
    vector<vector<int>> up(n+1);
    function<void(int,int )> dfs = [&](int v,int pr) {
        up[v].resize(B);
        up[v][0] = pr;
        for(int i = 1;i < B;i++){
            up[v][i] = up[up[v][i - 1]][i - 1];
        }
        for(int to:g[v]) {  
            dfs(to,v);
        }
    };
    for(int i:rt) {
        dfs(i,i);
    }
    return up;
}
const int maxn = (int)1e5 + 12;
int L[maxn],R[maxn];
vector<int> h;
void init(int N, vector<int> H) {
    h = H;
    n = N;
    n = N;
    vector<int> st,rt;
    vector<vector<int>> G(n);
    for(int i = 0;i < N;i++) {
        while(!(int)st.empty() && H[st.back()] < H[i]) {
            st.pop_back();
        }
        if(st.empty()) {
            L[i] = -1;
        }else {
            L[i] = st.back();
        }
        st.push_back(i);
    }
    st.clear();
    for(int i = N - 1;i >= 0;i--){
        while(!st.empty() && H[st.back()] < H[i]){
            st.pop_back();
        }
        if(st.empty()) {
            R[i] = -1;
        }else {
            R[i] = st.back();
        }
        st.push_back(i);
    }
}
int go(int v,int C,int D,int mx){
    // cerr << v << ' ' << R[v] << ' ' << L[v] << 'n'
    if(v >= C && v <= D){
        return 0;
    }
    if(L[v] == -1 || (R[v] != -1 && (h[L[v]] > mx || h[L[v]] < h[R[v]]))) {
        if(R[v] == -1) return (int)1e9;
        return go(R[v],C,D,mx) + 1;
    }
    return go(L[v],C,D,mx) + 1;
}
int minimum_jumps(int A, int B, int C, int D) {
    int mx = 0;
    for(int i = C;i <= D;i++){
        mx = max(mx,h[i]);    
    }
    int res = (int)1e9;
    for(int i = A;i <= B;i++){
        res = min(res,go(i,C,D,mx));
    }
    if(res == (int)1e9) res = -1;
    return 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...