Submission #1178050

#TimeUsernameProblemLanguageResultExecution timeMemory
1178050Muhammet밀림 점프 (APIO21_jumps)C++20
33 / 100
4070 ms15240 KiB
#include "bits/stdc++.h"
#include "jumps.h"
// #include "stub.cpp"

using namespace std;

#define SZ(s) (int)s.size()

const int N = 2e5 + 5;

int n;

vector <int> h, v[N];

void init(int N1, vector<int> H) {
    n = N1, h = H;
    vector <int> v1;
    for(int i = 0; i < n; i++) {
        while(SZ(v1) and h[v1.back()] < h[i]) {
            v1.pop_back();
        }
        if(SZ(v1)) v[i].push_back(v1.back());
        v1.push_back(i);
    }
    v1.clear();
    for(int i = n-1; i >= 0; i--) {
        while(SZ(v1) and h[v1.back()] < h[i]) {
            v1.pop_back();
        }
        if(SZ(v1)) v[i].push_back(v1.back());
        v1.push_back(i);
    }
    return;
}

int minimum_jumps(int a, int b, int c, int d) {
    queue <pair <int, int>> q;
    vector <int> vis(n+1, 0);
    for(int i = a; i <= b; i++) {
        q.push({i, 0});
        vis[i] = true;
    }
    int ans = 1e9;
    while(!q.empty()) {
        auto [x, s] = q.front();
        q.pop();
        if(c <= x and x <= d) ans = min(ans, s);
        for(auto i : v[x]) {
            if(vis[i]) continue;
            q.push({i, s + 1});
            vis[i] = true;
        }
    }
    return (ans == 1e9 ? -1 : 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...