# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
440650 | Elegia | Rainforest Jumps (APIO21_jumps) | C++17 | 1261 ms | 46456 KiB |
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 "jumps.h"
const int MAX_N = 200010, L = 18;
int N;
int h[MAX_N], left[MAX_N][L], right[MAX_N][L], gr[MAX_N][L];
void init(int _N, std::vector<int> _H) {
N = _N;
std::copy(_H.begin(), _H.end(), h + 1);
static int stack[MAX_N], ord[MAX_N];
int cnt = 0;
for (int i = 1; i <= N; ++i) {
while (cnt && h[i] > h[stack[cnt]])
right[stack[cnt--]][0] = i;
left[i][0] = stack[cnt];
stack[++cnt] = i;
}
for (int i = 1; i <= N; ++i) for (int j = 1; j != L; ++j)
left[i][j] = left[left[i][j - 1]][j - 1];
std::fill(right[N + 1], right[N + 1] + L, N + 1);
for (int i = N; i; --i) {
if (!right[i][0]) right[i][0] = N + 1;
for (int j = 1; j != L; ++j)
right[i][j] = right[right[i][j - 1]][j - 1];
}
for (int i = 1; i <= N; ++i) ord[h[i]] = i;
std::fill(gr[N + 1], gr[N + 1] + L, N + 1);
for (int i = N; i; --i) {
int j = ord[i];
# | 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... |