# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1168731 | fzyzzz_z | Rainforest Jumps (APIO21_jumps) | C++20 | 0 ms | 0 KiB |
#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;
constexpr int kMaxLogN = 20;
int N;
vector<int> H;
vector<vector<int>> L, R;
vector<vector<int>> higher;
void init(int _N, std::vector<int> _H) {
N = _N;
H = _H;
H.insert(H.begin(), INT_MAX);
H.insert(H.end(), INT_MAX);
N += 2;
L = R = higher = vector<vector<int>>(kMaxLogN, vector<int>(N));
stack<int> decreasing_height;
for (int i = 0; i < N; ++i) {
while (!decreasing_height.empty() && H[decreasing_height.top()] <= H[i]) {
decreasing_height.pop();
}
L[0][i] = decreasing_height.empty() ? i : decreasing_height.top();
decreasing_height.push(i);
}