#include <bits/stdc++.h>
using namespace std;
#include "jumps.h"
#define REP(i, j, k) for (int i = j; i < k; i++)
#define RREP(i, j, k) for (int i = j; i >= k; i--)
template <class T>
inline bool mnto(T& a, T b) {return a > b ? a = b, 1 : 0;}
template <class T>
inline bool mxto(T& a, T b) {return a < b ? a = b, 1 : 0;}
typedef long long ll;
#define FI first
#define SE second
#define MP make_pair
typedef pair<int, int> ii;
typedef pair<ll, ll> pll;
#define ALL(x) x.begin(), x.end()
#define pb emplace_back
typedef vector<int> vi;
typedef vector<ii> vii;
#ifdef DEBUG
#define debug(args...) printf(args)
#else
#define debug(args...)
#endif
#define INF 1000000005
#define MAXN 200005
#define MAXL 20
int n;
vi h;
int p[2][MAXL][MAXN];
ii sp[2][MAXL][MAXN];
inline ii qsp(bool b, int s, int e) {
int k = 31 - __builtin_clz(e - s + 1);
return max(sp[b][k][s], sp[b][k][e - (1 << k) + 1]);
}
void init(int _n, vi _h) {
n = _n;
h = _h;
{
stack<int> stk;
REP (i, 0, n) {
while (!stk.empty() && h[stk.top()] < h[i]) {
stk.pop();
}
if (!stk.empty()) {
p[0][0][i] = stk.top();
} else {
p[0][0][i] = -1;
}
stk.push(i);
}
}
{
stack<int> stk;
RREP (i, n - 1, 0) {
while (!stk.empty() && h[stk.top()] < h[i]) {
stk.pop();
}
if (!stk.empty()) {
p[1][0][i] = stk.top();
} else {
p[1][0][i] = -1;
}
stk.push(i);
}
}
REP (i, 0, n) {
if (p[0][0][i] == -1) {
swap(p[0][0][i], p[1][0][i]);
}
if (p[1][0][i] != -1) {
if (h[p[0][0][i]] < h[p[1][0][i]]) {
swap(p[0][0][i], p[1][0][i]);
}
}
debug("%d: %d %d\n", i, p[0][0][i], p[1][0][i]);
}
debug("\n");
REP (z, 0, 2) {
REP (k, 1, MAXL) {
REP (i, 0, n) {
if (p[z][k - 1][i] == -1) {
p[z][k][i] = -1;
} else {
p[z][k][i] = p[z][k - 1][p[z][k - 1][i]];
}
}
}
}
REP (i, 0, n) {
sp[0][0][i] = sp[1][0][i] = MP(h[i], i);
}
REP (k, 1, MAXL) {
REP (i, 0, n - (1 << k - 1)) {
sp[0][k][i] = max(sp[0][k - 1][i], sp[0][k - 1][i + (1 << k - 1)]);
sp[1][k][i] = min(sp[1][k - 1][i], sp[1][k - 1][i + (1 << k - 1)]);
}
}
}
ii jump(bool b, int u, int mx, int s = 0, int e = n - 1) {
int pc = 0;
RREP (k, MAXL - 1, 0) {
if (p[b][k][u] < s || p[b][k][u] > e) continue;
if (h[p[b][k][u]] <= mx) {
u = p[b][k][u];
pc += 1 << k;
}
}
return MP(u, pc);
}
int minimum_jumps(int a, int b, int c, int d) {
if (b + 1 == c) {
if ((p[0][0][b] >= c && p[0][0][b] <= d) ||
(p[1][0][b] >= c && p[1][0][b] <= d)) {
return 1;
} else {
return -1;
}
}
int rmx = qsp(0, c, d).FI, mmx = qsp(0, b + 1, c - 1).FI;
int u, pc;
u = qsp(1, a, b).SE;
debug("%d %d %d\n", rmx, mmx, u);
if (mmx > rmx || h[u] > rmx) {
return -1;
}
int res = 0;
tie(u, pc) = jump(0, u, rmx - 1, a, b);
tie(u, pc) = jump(1, u, rmx - 1, a, b);
debug(" %d\n", u);
if (h[u] < mmx) {
tie(u, pc) = jump(0, u, mmx - 1);
debug(" %d %d\n", u, pc);
res += pc;
pc = 0;
debug(" %d %d\n", p[0][0][u], h[p[0][0][u]]);
if (p[0][0][u] != -1 && h[p[0][0][u]] <= rmx) {
u = p[0][0][u];
pc++;
} else {
RREP (k, MAXL - 1, 0) {
if (p[1][k][u] == -1) continue;
if (h[p[1][k][u]] <= mmx - 1) {
u = p[1][k][u];
pc += 1 << k;
}
}
u = p[1][0][u];
pc++;
}
}
assert(h[u] >= mmx && h[u] <= rmx && u < c);
res += pc + 1;
return res;
}
/*
7 3
3 2 1 6 4 5 7
4 4 6 6
1 3 5 6
0 1 2 2
*/
Compilation message
jumps.cpp: In function 'void init(int, vi)':
jumps.cpp:101:32: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
101 | REP (i, 0, n - (1 << k - 1)) {
| ~~^~~
jumps.cpp:5:42: note: in definition of macro 'REP'
5 | #define REP(i, j, k) for (int i = j; i < k; i++)
| ^
jumps.cpp:102:73: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
102 | sp[0][k][i] = max(sp[0][k - 1][i], sp[0][k - 1][i + (1 << k - 1)]);
| ~~^~~
jumps.cpp:103:73: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
103 | sp[1][k][i] = min(sp[1][k - 1][i], sp[1][k - 1][i + (1 << k - 1)]);
| ~~^~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
456 KB |
Output is correct |
2 |
Correct |
1 ms |
420 KB |
Output is correct |
3 |
Correct |
204 ms |
70808 KB |
Output is correct |
4 |
Correct |
1312 ms |
89448 KB |
Output is correct |
5 |
Correct |
1273 ms |
44080 KB |
Output is correct |
6 |
Correct |
1433 ms |
89452 KB |
Output is correct |
7 |
Correct |
1118 ms |
60240 KB |
Output is correct |
8 |
Correct |
1288 ms |
89480 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
456 KB |
Output is correct |
2 |
Correct |
1 ms |
456 KB |
Output is correct |
3 |
Correct |
1 ms |
456 KB |
Output is correct |
4 |
Correct |
1 ms |
456 KB |
Output is correct |
5 |
Runtime error |
3 ms |
912 KB |
Execution killed with signal 6 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
456 KB |
Output is correct |
2 |
Correct |
1 ms |
456 KB |
Output is correct |
3 |
Correct |
1 ms |
456 KB |
Output is correct |
4 |
Correct |
1 ms |
456 KB |
Output is correct |
5 |
Runtime error |
3 ms |
912 KB |
Execution killed with signal 6 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
456 KB |
Output is correct |
2 |
Correct |
1 ms |
456 KB |
Output is correct |
3 |
Correct |
1 ms |
456 KB |
Output is correct |
4 |
Correct |
1 ms |
456 KB |
Output is correct |
5 |
Correct |
69 ms |
71440 KB |
Output is correct |
6 |
Correct |
83 ms |
89316 KB |
Output is correct |
7 |
Correct |
46 ms |
44648 KB |
Output is correct |
8 |
Incorrect |
87 ms |
89372 KB |
Output isn't correct |
9 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
456 KB |
Output is correct |
2 |
Correct |
0 ms |
456 KB |
Output is correct |
3 |
Correct |
0 ms |
456 KB |
Output is correct |
4 |
Correct |
196 ms |
39696 KB |
Output is correct |
5 |
Correct |
829 ms |
89348 KB |
Output is correct |
6 |
Correct |
618 ms |
13888 KB |
Output is correct |
7 |
Correct |
967 ms |
89360 KB |
Output is correct |
8 |
Correct |
683 ms |
29600 KB |
Output is correct |
9 |
Correct |
889 ms |
89372 KB |
Output is correct |
10 |
Correct |
1102 ms |
89476 KB |
Output is correct |
11 |
Correct |
1044 ms |
89648 KB |
Output is correct |
12 |
Correct |
1106 ms |
89484 KB |
Output is correct |
13 |
Correct |
787 ms |
89360 KB |
Output is correct |
14 |
Correct |
1307 ms |
89740 KB |
Output is correct |
15 |
Correct |
962 ms |
90128 KB |
Output is correct |
16 |
Correct |
748 ms |
90264 KB |
Output is correct |
17 |
Correct |
1 ms |
448 KB |
Output is correct |
18 |
Correct |
1 ms |
456 KB |
Output is correct |
19 |
Correct |
2 ms |
456 KB |
Output is correct |
20 |
Correct |
2 ms |
668 KB |
Output is correct |
21 |
Correct |
2 ms |
676 KB |
Output is correct |
22 |
Correct |
2 ms |
656 KB |
Output is correct |
23 |
Correct |
4 ms |
680 KB |
Output is correct |
24 |
Correct |
2 ms |
676 KB |
Output is correct |
25 |
Correct |
1 ms |
584 KB |
Output is correct |
26 |
Correct |
1 ms |
840 KB |
Output is correct |
27 |
Correct |
22 ms |
1224 KB |
Output is correct |
28 |
Correct |
19 ms |
1352 KB |
Output is correct |
29 |
Correct |
23 ms |
1352 KB |
Output is correct |
30 |
Correct |
16 ms |
1352 KB |
Output is correct |
31 |
Correct |
20 ms |
1352 KB |
Output is correct |
32 |
Correct |
0 ms |
456 KB |
Output is correct |
33 |
Correct |
44 ms |
50712 KB |
Output is correct |
34 |
Correct |
78 ms |
89348 KB |
Output is correct |
35 |
Correct |
74 ms |
89456 KB |
Output is correct |
36 |
Correct |
80 ms |
89364 KB |
Output is correct |
37 |
Correct |
82 ms |
89836 KB |
Output is correct |
38 |
Correct |
82 ms |
90176 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
456 KB |
Output is correct |
2 |
Correct |
0 ms |
456 KB |
Output is correct |
3 |
Correct |
0 ms |
456 KB |
Output is correct |
4 |
Correct |
196 ms |
39696 KB |
Output is correct |
5 |
Correct |
829 ms |
89348 KB |
Output is correct |
6 |
Correct |
618 ms |
13888 KB |
Output is correct |
7 |
Correct |
967 ms |
89360 KB |
Output is correct |
8 |
Correct |
683 ms |
29600 KB |
Output is correct |
9 |
Correct |
889 ms |
89372 KB |
Output is correct |
10 |
Correct |
1102 ms |
89476 KB |
Output is correct |
11 |
Correct |
1044 ms |
89648 KB |
Output is correct |
12 |
Correct |
1106 ms |
89484 KB |
Output is correct |
13 |
Correct |
787 ms |
89360 KB |
Output is correct |
14 |
Correct |
1307 ms |
89740 KB |
Output is correct |
15 |
Correct |
962 ms |
90128 KB |
Output is correct |
16 |
Correct |
748 ms |
90264 KB |
Output is correct |
17 |
Correct |
1 ms |
448 KB |
Output is correct |
18 |
Correct |
1 ms |
456 KB |
Output is correct |
19 |
Correct |
2 ms |
456 KB |
Output is correct |
20 |
Correct |
2 ms |
668 KB |
Output is correct |
21 |
Correct |
2 ms |
676 KB |
Output is correct |
22 |
Correct |
2 ms |
656 KB |
Output is correct |
23 |
Correct |
4 ms |
680 KB |
Output is correct |
24 |
Correct |
2 ms |
676 KB |
Output is correct |
25 |
Correct |
1 ms |
584 KB |
Output is correct |
26 |
Correct |
1 ms |
840 KB |
Output is correct |
27 |
Correct |
22 ms |
1224 KB |
Output is correct |
28 |
Correct |
19 ms |
1352 KB |
Output is correct |
29 |
Correct |
23 ms |
1352 KB |
Output is correct |
30 |
Correct |
16 ms |
1352 KB |
Output is correct |
31 |
Correct |
20 ms |
1352 KB |
Output is correct |
32 |
Correct |
0 ms |
456 KB |
Output is correct |
33 |
Correct |
44 ms |
50712 KB |
Output is correct |
34 |
Correct |
78 ms |
89348 KB |
Output is correct |
35 |
Correct |
74 ms |
89456 KB |
Output is correct |
36 |
Correct |
80 ms |
89364 KB |
Output is correct |
37 |
Correct |
82 ms |
89836 KB |
Output is correct |
38 |
Correct |
82 ms |
90176 KB |
Output is correct |
39 |
Correct |
1 ms |
456 KB |
Output is correct |
40 |
Correct |
1 ms |
456 KB |
Output is correct |
41 |
Correct |
1 ms |
456 KB |
Output is correct |
42 |
Correct |
302 ms |
39668 KB |
Output is correct |
43 |
Correct |
942 ms |
89388 KB |
Output is correct |
44 |
Correct |
634 ms |
14024 KB |
Output is correct |
45 |
Correct |
1029 ms |
89372 KB |
Output is correct |
46 |
Correct |
550 ms |
29592 KB |
Output is correct |
47 |
Correct |
939 ms |
89368 KB |
Output is correct |
48 |
Correct |
835 ms |
89448 KB |
Output is correct |
49 |
Correct |
1063 ms |
89496 KB |
Output is correct |
50 |
Correct |
1079 ms |
89472 KB |
Output is correct |
51 |
Correct |
919 ms |
89420 KB |
Output is correct |
52 |
Correct |
1099 ms |
89732 KB |
Output is correct |
53 |
Correct |
1028 ms |
90136 KB |
Output is correct |
54 |
Correct |
812 ms |
90156 KB |
Output is correct |
55 |
Correct |
1 ms |
456 KB |
Output is correct |
56 |
Runtime error |
204 ms |
179128 KB |
Execution killed with signal 6 |
57 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
456 KB |
Output is correct |
2 |
Correct |
1 ms |
420 KB |
Output is correct |
3 |
Correct |
204 ms |
70808 KB |
Output is correct |
4 |
Correct |
1312 ms |
89448 KB |
Output is correct |
5 |
Correct |
1273 ms |
44080 KB |
Output is correct |
6 |
Correct |
1433 ms |
89452 KB |
Output is correct |
7 |
Correct |
1118 ms |
60240 KB |
Output is correct |
8 |
Correct |
1288 ms |
89480 KB |
Output is correct |
9 |
Correct |
1 ms |
456 KB |
Output is correct |
10 |
Correct |
1 ms |
456 KB |
Output is correct |
11 |
Correct |
1 ms |
456 KB |
Output is correct |
12 |
Correct |
1 ms |
456 KB |
Output is correct |
13 |
Runtime error |
3 ms |
912 KB |
Execution killed with signal 6 |
14 |
Halted |
0 ms |
0 KB |
- |