Submission #1345349

#TimeUsernameProblemLanguageResultExecution timeMemory
1345349killerzaluuRainforest Jumps (APIO21_jumps)C++20
33 / 100
4065 ms12948 KiB
#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;

int n;
vector<int> h;
vector<int> ord;

void init(int N, vector<int> H) {
    n = N;
    h = H;
    ord.resize(n);
    iota(ord.begin(), ord.end(), 0);
    sort(ord.begin(), ord.end(), [&](int a, int b) {
        return h[a] > h[b];
    });
}

int minimum_jumps(int A, int B, int C, int D) {
    const int INF = 1e9;
    vector<int> dp(n, INF);
    set<int> s;

    for (int id : ord) {
        auto it = s.lower_bound(id);

        int best = INF;

        if (C <= id && id <= D) best = 0;

        if (it != s.end()) best = min(best, dp[*it] + 1);
        if (it != s.begin()) {
            --it;
            best = min(best, dp[*it] + 1);
        }

        dp[id] = best;
        s.insert(id);
    }

    int ans = INF;
    for (int i = A; i <= B; i++) ans = min(ans, dp[i]);

    if (ans == INF) return -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...