이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
int nums, height[MAXN], lf[MAXN][20], rt[MAXN][20], hi[MAXN][20];
int query(int l, int r, int targ){
int ans = r;
if (height[ans] > targ) return -1;
for (int k = 19; k >= 0; k--)
if (lf[ans][k] >= l && height[lf[ans][k]] < targ)
ans = lf[ans][k];
return ans;
}
void init(int N, vector<int> H) {
nums = N;
for (int i = 1; i <= nums; i++) height[i] = H[i - 1];
height[0] = height[nums + 1] = nums + 1;
stack<pair<int, int>> s;
s.push({nums + 1, 0});
for (int i = 1; i <= nums; i++){
while (height[i] > s.top().first) s.pop();
lf[i][0] = s.top().second;
s.push({height[i], i});
}
while (s.size()) s.pop();
s.push({nums + 1, nums + 1});
for (int i = nums; i >= 1; i--){
while (height[i] > s.top().first) s.pop();
rt[i][0] = s.top().second;
s.push({height[i], i});
}
for (int i = 1; i <= nums; i++) hi[i][0] = (height[lf[i][0]] > height[rt[i][0]] ? lf[i][0] : rt[i][0]);
for (int k = 1; k < 20; k++)
for (int i = 1; i <= nums; i++){
if (lf[i][k - 1] == 0) lf[i][k] = 0;
else lf[i][k] = lf[lf[i][k - 1]][k - 1];
if (rt[i][k - 1] == nums + 1) rt[i][k] = nums + 1;
else rt[i][k] = rt[rt[i][k - 1]][k - 1];
if (hi[i][k - 1] == 0 || hi[i][k - 1] == nums + 1) hi[i][k] = hi[i][k - 1];
else hi[i][k] = hi[hi[i][k - 1]][k - 1];
}
}
int minimum_jumps(int A, int B, int C, int D) {
A++; B++; C++; D++;
int maxcd = height[query(C, D, MAXN)], curr = query(A, B, maxcd);
if (curr == -1) return -1;
int ans = 0;
for (int k = 19; k >= 0; k--)
if (height[hi[curr][k]] != nums + 1 && rt[hi[curr][k]][0] < C){
curr = hi[curr][k];
ans += (1 << k);
}
if (rt[curr][0] < C && height[hi[curr][0]] != nums + 1 && rt[hi[curr][0]][0] <= D){
ans++;
curr = hi[curr][0];
}
for (int k = 19; k >= 0; k--)
if (rt[curr][k] < C){
curr = rt[curr][k];
ans += (1 << k);
}
if (rt[curr][0] > D) return -1;
else return ans + 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... |