#include "jumps.h"
#ifndef EVAL
#include "stub.cpp"
#endif
#include "bits/stdc++.h"
using namespace std;
const int B = 205;
const int N = 2e5 + 5;
const int lg = 18;
int mx[N][lg], mn[N][lg], h[N], pos[N];
int lx[N], rx[N], prec[N/B][N];
struct ST{
vector<int> tree[N << 2];
int mx[N << 2];
void build(int lx = 0, int rx = N, int x = 1){
if(lx == rx) { tree[x].push_back(h[lx]); return; }
int m = (lx + rx) >> 1;
build(lx, m, x << 1);
build(m + 1, rx, x << 1 | 1);
tree[x].insert(tree[x].end(), tree[x<<1].begin(), tree[x<<1].end());
tree[x].insert(tree[x].end(), tree[x<<1|1].begin(), tree[x<<1|1].end());
sort(tree[x].begin(), tree[x].end());
mx[x] = max(mx[x<<1], mx[x<<1|1]);
}
int get_(int l, int r, int v, int lx = 0, int rx = N, int x = 1){
if(lx > r || rx < l) return -1;
if(lx >= l && rx <= r){
if(mx[x] <= v) return -1;
if(lx == rx) return lx;
int m = (lx + rx) >> 1;
if(mx[x << 1 | 1] > v) return get_(l, r, v, m + 1, rx, x<<1 | 1);
else return get_(l, r, v, lx, m, x << 1);
} int m = (lx + rx) >> 1;
int R = get_(l, r, v, m + 1, rx, x << 1 | 1);
if(~R) return R;
return get_(l, r, v, lx, m, x << 1);
}
int get(int l, int r, int v, int lx = 0, int rx = N, int x = 1){
if(lx > r || rx < l) return -1;
if(lx >= l && rx <= r){
auto it = lower_bound(tree[x].begin(), tree[x].end(), v);
if(it == tree[x].begin()) return -1;
return *--it;
} int m = (lx + rx) >> 1;
return max(get(l, r, v, lx, m, x<<1), get(l, r, v, m+1, rx, x<<1|1));
}
}tree;
void init(int n, vector<int> H){
for(int i=0;i<n;i++){
h[i] = H[i];
pos[h[i]] = i;
}
vector<int> ss;
for(int i=0;i<n;i++){
while(!ss.empty() && h[ss.back()] < h[i]) ss.pop_back();
if(!ss.empty()) lx[i] = ss.back();
else lx[i] = n;
ss.push_back(i);
} ss.clear();
for(int i=n-1;~i;i--){
while(!ss.empty() && h[ss.back()] < h[i]) ss.pop_back();
if(!ss.empty()) rx[i] = ss.back();
else rx[i] = n;
ss.push_back(i);
} ss.clear();
h[n] = N;
tree.build();
for(int i=0;i<n;i++){
if(h[lx[i]] < h[rx[i]]){
swap(lx[i], rx[i]);
}
mn[i][0] = rx[i];
mx[i][0] = lx[i];
}
mn[n][0] = mx[n][0] = n;
//~ for(int i=0;i<n;i++) cout<<mn[i][0]<<" ";
//~ cout<<"\n";
//~ for(int i=0;i<n;i++) cout<<mx[i][0]<<" ";
//~ cout<<"\n";
for(int j=1;j<lg;j++){
for(int i=0;i<=n;i++){
mn[i][j] = mn[mn[i][j-1]][j-1];
mx[i][j] = mx[mx[i][j-1]][j-1];
}
}
}
int check(int a, int c){
int res = 0;
for(int i=lg-1;~i;i--){
if(h[mx[a][i]] <= h[c]){
//~ cout<<mx[a][i]<<" "<<h[mx[a][i]]<<" "<<h[c]<<"\n";
//~ cout<<i<<"\n";
a = mx[a][i], res += (1 << i);
}
}
for(int i=lg-1;~i;i--){
if(h[mn[a][i]] <= h[c]){
//~ cout<<mx[a][i]<<" "<<h[mx[a][i]]<<" "<<h[c]<<"\n";
a = mn[a][i], res += (1 << i);
}
}
if(a != c) return -1;
return res;
}
int minimum_jumps(int a, int b, int c, int d) {
//~ int res = N;
int l = tree.get_(a, b, h[c]);
if(l >= b) return -1;
a = tree.get(max(a, ++l), b, h[c]);
if(a == -1) return -1;
return check(pos[a], c);
}
/*
7 2
3 2 1 6 4 5 7
4 4 6 6
0 1 2 2
*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
107 ms |
44580 KB |
Output is correct |
2 |
Correct |
94 ms |
44636 KB |
Output is correct |
3 |
Correct |
316 ms |
71404 KB |
Output is correct |
4 |
Correct |
1591 ms |
78224 KB |
Output is correct |
5 |
Correct |
1325 ms |
61188 KB |
Output is correct |
6 |
Correct |
1385 ms |
78220 KB |
Output is correct |
7 |
Correct |
1199 ms |
67572 KB |
Output is correct |
8 |
Correct |
1321 ms |
78300 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
105 ms |
44608 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
105 ms |
44608 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
118 ms |
44608 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
100 ms |
44676 KB |
Output is correct |
2 |
Correct |
128 ms |
44688 KB |
Output is correct |
3 |
Correct |
133 ms |
44672 KB |
Output is correct |
4 |
Correct |
409 ms |
59224 KB |
Output is correct |
5 |
Correct |
1191 ms |
77168 KB |
Output is correct |
6 |
Correct |
719 ms |
49612 KB |
Output is correct |
7 |
Correct |
1066 ms |
77104 KB |
Output is correct |
8 |
Correct |
684 ms |
55564 KB |
Output is correct |
9 |
Correct |
1086 ms |
77152 KB |
Output is correct |
10 |
Correct |
1130 ms |
78308 KB |
Output is correct |
11 |
Correct |
976 ms |
78240 KB |
Output is correct |
12 |
Correct |
988 ms |
78148 KB |
Output is correct |
13 |
Correct |
1072 ms |
77244 KB |
Output is correct |
14 |
Correct |
1040 ms |
77548 KB |
Output is correct |
15 |
Correct |
966 ms |
78288 KB |
Output is correct |
16 |
Correct |
1034 ms |
78236 KB |
Output is correct |
17 |
Correct |
92 ms |
44708 KB |
Output is correct |
18 |
Correct |
96 ms |
44652 KB |
Output is correct |
19 |
Correct |
95 ms |
44664 KB |
Output is correct |
20 |
Correct |
104 ms |
44680 KB |
Output is correct |
21 |
Correct |
100 ms |
44688 KB |
Output is correct |
22 |
Correct |
93 ms |
44676 KB |
Output is correct |
23 |
Correct |
105 ms |
44604 KB |
Output is correct |
24 |
Correct |
104 ms |
44628 KB |
Output is correct |
25 |
Correct |
105 ms |
44600 KB |
Output is correct |
26 |
Correct |
91 ms |
44680 KB |
Output is correct |
27 |
Correct |
115 ms |
44740 KB |
Output is correct |
28 |
Correct |
116 ms |
44672 KB |
Output is correct |
29 |
Correct |
113 ms |
44648 KB |
Output is correct |
30 |
Correct |
105 ms |
44672 KB |
Output is correct |
31 |
Correct |
110 ms |
44760 KB |
Output is correct |
32 |
Correct |
101 ms |
44572 KB |
Output is correct |
33 |
Correct |
221 ms |
63340 KB |
Output is correct |
34 |
Correct |
263 ms |
77100 KB |
Output is correct |
35 |
Correct |
164 ms |
78156 KB |
Output is correct |
36 |
Correct |
278 ms |
77120 KB |
Output is correct |
37 |
Correct |
204 ms |
77468 KB |
Output is correct |
38 |
Correct |
179 ms |
78460 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
100 ms |
44676 KB |
Output is correct |
2 |
Correct |
128 ms |
44688 KB |
Output is correct |
3 |
Correct |
133 ms |
44672 KB |
Output is correct |
4 |
Correct |
409 ms |
59224 KB |
Output is correct |
5 |
Correct |
1191 ms |
77168 KB |
Output is correct |
6 |
Correct |
719 ms |
49612 KB |
Output is correct |
7 |
Correct |
1066 ms |
77104 KB |
Output is correct |
8 |
Correct |
684 ms |
55564 KB |
Output is correct |
9 |
Correct |
1086 ms |
77152 KB |
Output is correct |
10 |
Correct |
1130 ms |
78308 KB |
Output is correct |
11 |
Correct |
976 ms |
78240 KB |
Output is correct |
12 |
Correct |
988 ms |
78148 KB |
Output is correct |
13 |
Correct |
1072 ms |
77244 KB |
Output is correct |
14 |
Correct |
1040 ms |
77548 KB |
Output is correct |
15 |
Correct |
966 ms |
78288 KB |
Output is correct |
16 |
Correct |
1034 ms |
78236 KB |
Output is correct |
17 |
Correct |
92 ms |
44708 KB |
Output is correct |
18 |
Correct |
96 ms |
44652 KB |
Output is correct |
19 |
Correct |
95 ms |
44664 KB |
Output is correct |
20 |
Correct |
104 ms |
44680 KB |
Output is correct |
21 |
Correct |
100 ms |
44688 KB |
Output is correct |
22 |
Correct |
93 ms |
44676 KB |
Output is correct |
23 |
Correct |
105 ms |
44604 KB |
Output is correct |
24 |
Correct |
104 ms |
44628 KB |
Output is correct |
25 |
Correct |
105 ms |
44600 KB |
Output is correct |
26 |
Correct |
91 ms |
44680 KB |
Output is correct |
27 |
Correct |
115 ms |
44740 KB |
Output is correct |
28 |
Correct |
116 ms |
44672 KB |
Output is correct |
29 |
Correct |
113 ms |
44648 KB |
Output is correct |
30 |
Correct |
105 ms |
44672 KB |
Output is correct |
31 |
Correct |
110 ms |
44760 KB |
Output is correct |
32 |
Correct |
101 ms |
44572 KB |
Output is correct |
33 |
Correct |
221 ms |
63340 KB |
Output is correct |
34 |
Correct |
263 ms |
77100 KB |
Output is correct |
35 |
Correct |
164 ms |
78156 KB |
Output is correct |
36 |
Correct |
278 ms |
77120 KB |
Output is correct |
37 |
Correct |
204 ms |
77468 KB |
Output is correct |
38 |
Correct |
179 ms |
78460 KB |
Output is correct |
39 |
Correct |
105 ms |
44664 KB |
Output is correct |
40 |
Correct |
106 ms |
44584 KB |
Output is correct |
41 |
Correct |
92 ms |
44596 KB |
Output is correct |
42 |
Correct |
384 ms |
59304 KB |
Output is correct |
43 |
Correct |
1065 ms |
77244 KB |
Output is correct |
44 |
Correct |
515 ms |
49660 KB |
Output is correct |
45 |
Correct |
998 ms |
77148 KB |
Output is correct |
46 |
Correct |
545 ms |
55528 KB |
Output is correct |
47 |
Correct |
984 ms |
77112 KB |
Output is correct |
48 |
Correct |
1155 ms |
78220 KB |
Output is correct |
49 |
Correct |
1029 ms |
78140 KB |
Output is correct |
50 |
Correct |
1087 ms |
78140 KB |
Output is correct |
51 |
Correct |
1108 ms |
77052 KB |
Output is correct |
52 |
Correct |
1081 ms |
77540 KB |
Output is correct |
53 |
Correct |
997 ms |
78308 KB |
Output is correct |
54 |
Correct |
786 ms |
78220 KB |
Output is correct |
55 |
Correct |
92 ms |
44696 KB |
Output is correct |
56 |
Incorrect |
322 ms |
76968 KB |
Output isn't correct |
57 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
107 ms |
44580 KB |
Output is correct |
2 |
Correct |
94 ms |
44636 KB |
Output is correct |
3 |
Correct |
316 ms |
71404 KB |
Output is correct |
4 |
Correct |
1591 ms |
78224 KB |
Output is correct |
5 |
Correct |
1325 ms |
61188 KB |
Output is correct |
6 |
Correct |
1385 ms |
78220 KB |
Output is correct |
7 |
Correct |
1199 ms |
67572 KB |
Output is correct |
8 |
Correct |
1321 ms |
78300 KB |
Output is correct |
9 |
Incorrect |
105 ms |
44608 KB |
Output isn't correct |
10 |
Halted |
0 ms |
0 KB |
- |