제출 #1356657

#제출 시각아이디문제언어결과실행 시간메모리
1356657MunkhErdene밀림 점프 (APIO21_jumps)C++17
33 / 100
4093 ms14436 KiB
#include "jumps.h"
#include <bits/stdc++.h>
using ll = long long;
using namespace std;

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define FOR(i, a, b) for(ll i = (a); i < (b); ++i)
#define FORD(i, a, b) for(ll i = (a); i >= (b); --i)
#define ok cout << "ok\n"
ll n;
vector<vector<int>> g;
void init(int N, vector<int> h) {
    n = N;
    g.assign(n, vector<int>());
    vector<int> stk;
    FOR(i, 0, n) {
        while(!stk.empty() && h[stk.back()] <= h[i]) stk.pop_back();
        if(stk.size()) {
            ll x = stk.back();
            g[i].pb(x);
        }
        stk.pb(i);
    }
    stk.clear();
    FORD(i, n - 1, 0) {
        while(!stk.empty() && h[stk.back()] <= h[i]) stk.pop_back();
        if(stk.size()) {
            ll x = stk.back();
            g[i].pb(x);
        }
        stk.pb(i);
    }
}

int minimum_jumps(int A, int B, int C, int D) {
    vector<int> vis(n, 0);
    queue<pair<int, int>> q;
    FOR(i, A, B + 1) {
        q.push({i, 0});
        vis[i] = 1;
    }
    while(!q.empty()) {
        auto [u, d] = q.front(); q.pop();
        if(C <= u && u <= D) {
            return d;
        }
        for(auto &v : g[u]) {
            if(vis[v] == 1) continue;
            vis[v] = 1;
            q.push({v, d + 1});
        }
    }
    return -1;
}

#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…