This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
const int MAXLG = 20;
int n, heights[MAXN];
int L[MAXN][MAXLG], R[MAXN][MAXLG], high[MAXN][MAXLG];
void init(int N, vector<int> H) {
n = N;
heights[0] = heights[n + 1] = 1e9;
for(int i = 0; i < n; i++) heights[i + 1] = H[i];
vector <int> ii; ii.push_back(0);
for(int i = 1; i <= n; i++) {
while(heights[ii.back()] < heights[i]) ii.pop_back();
L[i][0] = ii.back();
ii.push_back(i);
}
ii.clear(); ii.push_back(n + 1);
for(int i = n; i >= 1; i--) {
while(heights[ii.back()] < heights[i]) ii.pop_back();
R[i][0] = ii.back();
ii.push_back(i);
high[i][0] = ((heights[L[i][0]] > heights[R[i][0]] ? L[i][0] : R[i][0]));
}
R[n + 1][0] = n + 1;
for(int p = 1; p <= 19; p++) {
R[n + 1][p] = n + 1;
for(int i = 1; i <= n; i++) {
L[i][p] = L[L[i][p - 1]][p - 1];
R[i][p] = R[R[i][p - 1]][p - 1];
high[i][p] = high[high[i][p - 1]][p - 1];
}
}
}
int minimum_jumps(int A, int B, int C, int D) {
A++, B++, C++, D++;
int furthest = B;
for(int i = 19; i >= 0; i--) {
if(R[furthest][i] < C) furthest = R[furthest][i];
}
if(furthest == B) {
if(R[B][0] <= D) return 1;
}
int st = B;
for(int i = 19; i >= 0; i--) {
if(L[st][i] >= A && heights[L[st][i]] < heights[furthest]) st = L[st][i];
}
if(L[st][0] >= A && R[L[st][0]][0] <= D) return 1;
int cur = st, ans = 0;
for(int i = 19; i >= 0; i--) {
if(heights[high[cur][i]] <= heights[furthest]) {
cur = high[cur][i];
ans += 1 << i;
}
}
if(R[cur][0] >= C && R[cur][0] <= D) return ans + 1;
if(L[cur][0] != 0 && R[L[cur][0]][0] <= D) return ans + 2;
for(int i = 19; i >= 0; i--) {
if(R[cur][i] < C) {
cur = R[cur][i];
ans += 1 << i;
}
}
if(R[cur][0] <= D) return ans + 1;
else return -1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |