Submission #983816

#TimeUsernameProblemLanguageResultExecution timeMemory
983816The_SamuraiRainforest Jumps (APIO21_jumps)C++17
0 / 100
4010 ms16956 KiB
#include "jumps.h"
#include "bits/stdc++.h"
using namespace std;

const int lg = 18, N = 2e5 + 5, inf = 1e9;
vector jump(lg, vector(N, N));
int n;

void init(int N, vector<int> H) {
    n = N;
    stack<int> s;
    for (int i = n - 1; i >= 0; i--) {
        while (!s.empty() and H[s.top()] < H[i]) s.pop();
        jump[0][i] = s.empty() ? n : s.top();
        s.push(i);
        if (jump[0][i] == n) continue;
        for (int j = 1; j < lg; j++) {
            jump[j][i] = jump[j - 1][jump[j - 1][i]];
            if (jump[j][i] >= n) break;
        }
    }
}

int minimum_jumps(int a, int b, int c, int d) {
    int ans = inf;
    for (int i = a; i <= b; i++) {
        int x = i, now = 0;
        for (int j = lg - 1; j >= 0; j--) {
            if (jump[j][x] >= c) continue;
            x = jump[j][x];
            now += 1 << j;
        }
        if (c <= jump[0][x] and jump[0][x] <= d) ans = min(ans, now + 1);
    }
    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...