Submission #1275333

#TimeUsernameProblemLanguageResultExecution timeMemory
1275333chikien2009Rainforest Jumps (APIO21_jumps)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include "jumps.h" using namespace std; int n, q, lpos, rpos, des, mid, sta, res; int h[200000], l[200000], r[200000]; int high[20][200000], low[20][200000], sp[20][200000]; vector<int> v; inline int Get_sp(int _l, int _r) { int _k = __lg(_r - _l + 1); _l = sp[_k][_l]; _r = sp[_k][_r - (1 << _k) + 1]; return (h[_l] > h[_r] ? _l : _r); } inline int Go(int start_pos, int end_pos) { int ret = 0; for (int i = 19, j; i >= 0; --i) { j = high[i][start_pos]; if (j != -1 && h[j] < h[end_pos]) { start_pos = j; ret += (1 << i); } } for (int i = 19, j; i >= 0; --i) { j = low[i][start_pos]; if (j != -1 && h[j] < h[end_pos]) { start_pos = j; ret += (1 << i); } } return ret + 1; } void init(int N, int(H[])) { n = N; for (int i = 0; i < n; ++i) { h[i] = H[i]; } for (int i = 0; i < n; ++i) { cin >> h[i]; while (!v.empty() && h[v.back()] <= h[i]) { v.pop_back(); } l[i] = (v.empty() ? -1 : v.back()); v.push_back(i); } v.clear(); for (int i = n - 1; i >= 0; --i) { while (!v.empty() && h[v.back()] <= h[i]) { v.pop_back(); } r[i] = (v.empty() ? -1 : v.back()); v.push_back(i); high[0][i] = (l[i] == -1 ? r[i] : (r[i] == -1 ? l[i] : (h[l[i]] > h[r[i]] ? l[i] : r[i]))); low[0][i] = (l[i] == -1 ? r[i] : (r[i] == -1 ? l[i] : (h[l[i]] < h[r[i]] ? l[i] : r[i]))); sp[0][i] = i; } for (int i = 1; i < 20; ++i) { for (int j = 0; j < n; ++j) { lpos = high[i - 1][j]; high[i][j] = (lpos == -1 ? -1 : high[i - 1][lpos]); lpos = low[i - 1][j]; low[i][j] = (lpos == -1 ? -1 : low[i - 1][lpos]); } for (int j = 0; j + (1 << i) <= n; ++j) { lpos = sp[i - 1][j]; rpos = sp[i - 1][j + (1 << (i - 1))]; sp[i][j] = (h[lpos] > h[rpos] ? lpos : rpos); } } } int minimum_jumps(int a, int b, int c, int d) { des = Get_sp(c, d); mid = (b + 1 < c ? Get_sp(b + 1, c - 1) : -1); sta = -1; for (int i = 19, j = b + 1; i >= 0; --i) { if (a <= j - (1 << i) && h[Get_sp(j - (1 << i), b)] < h[des]) { j -= (1 << i); sta = Get_sp(j, b); } } if (sta == -1 || (mid != -1 && h[mid] >= h[des])) { return -1; } if (mid == -1) { return (h[b] <= h[des] ? 1 : -1); } if (h[sta] >= h[mid]) { res = Go(sta, des); } else { res = Go(sta, mid) + 1; if (l[mid] != -1 && h[l[mid]] < h[des]) { res = min(res, Go(sta, l[mid]) + 1); } } return res; } // int main() // { // return 0; // }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccSRa4Tp.o: in function `main':
stub.cpp:(.text.startup+0x159): undefined reference to `init(int, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status