Submission #1199057

#TimeUsernameProblemLanguageResultExecution timeMemory
1199057origabai밀림 점프 (APIO21_jumps)C++20
33 / 100
4099 ms14500 KiB
#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;

int N;
vector<int> H;
vector<vector<int>> out;

void init(int N2, std::vector<int> H2){
    N=N2;
    H=H2;
    stack<int> s;
    out.resize(N);
    for (int i=0;i<N;i++){
        while (s.size() && H[s.top()] < H[i]){
            out[s.top()].push_back(i);
            s.pop();
        }
        s.push(i);
    }
    while (s.size()) s.pop();
    for (int i=N-1;i>=0;i--){
        while (s.size() && H[s.top()] < H[i]){
            out[s.top()].push_back(i);
            s.pop();
        }
        s.push(i);
    }
}

int minimum_jumps(int A, int B, int C, int D) {
    vector<int> dist(N,1e9);
    queue<int> q;
    for (int i=A;i<=B;i++){
        q.push(i);
        dist[i] = 0;
    }
    while (q.size()){
        int v = q.front();
        q.pop();
        for (int u : out[v]){
            if (dist[u] == 1e9){
                dist[u] = dist[v] + 1;
                q.push(u);
            }
        }
    }
    int ans = 1e9;
    for (int i=C;i<=D;i++){
        ans = min(ans, dist[i]);
    }
    if (ans == 1e9) ans =-1;
    return ans;
}
#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...