Submission #567343

# Submission time Handle Problem Language Result Execution time Memory
567343 2022-05-23T10:43:02 Z amunduzbaev Rainforest Jumps (APIO21_jumps) C++17
77 / 100
4000 ms 695100 KB
#include "jumps.h"

#ifndef EVAL
#include "stub.cpp"
#endif

#include "bits/stdc++.h"
using namespace std;

const int B = 650;
const int N = 2e5 + 5;
const int M = N / B + 5;
const int lg = 18;
vector<int> edges[N];
int mx[N][lg], mn[N][lg], h[N], pos[N];
int st[N][lg], pre[N];
int lx[N], rx[N];

struct ST{
	int tree[N << 2];
	void build(int lx = 0, int rx = N - 1, int x = 1){
		if(lx == rx) { tree[x] = pre[lx]; return; }
		int m = (lx + rx) >> 1;
		build(lx, m, x << 1);
		build(m + 1, rx, x << 1 | 1);
		tree[x] = min(tree[x<<1], tree[x<<1 | 1]);
	}
	
	int get(int l, int r, int lx = 0, int rx = N - 1, int x = 1){
		if(lx > r || rx < l) return N;
		if(lx >= l && rx <= r) return tree[x];
		int m = (lx + rx) >> 1;
		return min(get(l, r, lx, m, x<<1), get(l, r, m+1, rx, x<<1|1));
	}
}tree[M];

void init(int n, vector<int> H){
	for(int i=0;i<n;i++){
		h[i] = H[i];
		pos[h[i]] = i;
		st[i][0] = h[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;
	
	for(int i=0;i<n;i++){
		if(h[lx[i]] < h[rx[i]]){
			swap(lx[i], rx[i]);
		} 
		edges[lx[i]].push_back(i);
		edges[rx[i]].push_back(i);
		mn[i][0] = rx[i];
		mx[i][0] = lx[i];
		lx[i] = min(lx[i], rx[i]);
		if(i < lx[i]) lx[i] = -1;
	}
	mn[n][0] = mx[n][0] = n;
	edges[n].clear();
	
	for(int b=0;b * B<n;b++){
		for(int i=0;i<n;i++) pre[i] = N;
		queue<int> q;
		for(int i=0;b * B + i<n && i<B;i++){
			q.push(b * B + i);
			pre[b * B + i] = 0;
		}
		
		while(!q.empty()){
			int u = q.front(); q.pop();
			for(auto x : edges[u]){
				if(pre[x] > pre[u] + 1){
					pre[x] = pre[u] + 1;
					q.push(x);
				}
			}
		}
		
		tree[b].build();
	}
	
	for(int j=1;j<lg;j++){
		for(int i=0;i<=n;i++){
			if(i + (1 << (j - 1)) < n) st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j-1]);
			mn[i][j] = mn[mn[i][j-1]][j-1];
			mx[i][j] = mx[mx[i][j-1]][j-1];
		}
	}
}

int get(int l, int r){
	int lg = __lg(r - l + 1);
	return max(st[l][lg], st[r - (1 << lg) + 1][lg]);
}

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 N;
	return res;
}

int minimum_jumps(int a, int b, int c, int d) {
	int bl = c / B, br = d / B;
	int res = N;
	for(int j=bl+1;j<br;j++){
		//~ assert(false);
		res = min(res, tree[j].get(a, b));
	}
	
	auto calc = [&](int l, int r){
		for(int i=l;i<=r;i++){
			int L = max(lx[i] + 1, a);
			if(L <= b){
				int mx = pos[get(L, b)];
				res = min(res, check(mx, i));
			}
		}
	};
	
	if(bl == br){
		calc(c, d);
	} else {
		if(c % B == 0) res = min(res, tree[bl].get(a, b));
		else calc(c, (bl + 1) * B - 1);
		if((d + 1) % B == 0) res = min(res, tree[br].get(a, b));
		else calc(br * B, d);
	}
	
	if(res == N) return -1;
	return res;
}

/*

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 4 ms 6992 KB Output is correct
2 Correct 4 ms 6992 KB Output is correct
3 Correct 1582 ms 553436 KB Output is correct
4 Execution timed out 4121 ms 694364 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 4 ms 6992 KB Output is correct
3 Correct 4 ms 6992 KB Output is correct
4 Correct 4 ms 6992 KB Output is correct
5 Correct 7 ms 6992 KB Output is correct
6 Correct 7 ms 7120 KB Output is correct
7 Correct 6 ms 7120 KB Output is correct
8 Correct 7 ms 7120 KB Output is correct
9 Correct 5 ms 7168 KB Output is correct
10 Correct 7 ms 7120 KB Output is correct
11 Correct 7 ms 7120 KB Output is correct
12 Correct 7 ms 7120 KB Output is correct
13 Correct 6 ms 7120 KB Output is correct
14 Correct 5 ms 7120 KB Output is correct
15 Correct 7 ms 7120 KB Output is correct
16 Correct 6 ms 7052 KB Output is correct
17 Correct 6 ms 7120 KB Output is correct
18 Correct 4 ms 6980 KB Output is correct
19 Correct 5 ms 6992 KB Output is correct
20 Correct 7 ms 7040 KB Output is correct
21 Correct 8 ms 7120 KB Output is correct
22 Correct 6 ms 7120 KB Output is correct
23 Correct 6 ms 7120 KB Output is correct
24 Correct 6 ms 7120 KB Output is correct
25 Correct 4 ms 6992 KB Output is correct
26 Correct 4 ms 6992 KB Output is correct
27 Correct 5 ms 6992 KB Output is correct
28 Correct 7 ms 7120 KB Output is correct
29 Correct 6 ms 7120 KB Output is correct
30 Correct 6 ms 7120 KB Output is correct
31 Correct 6 ms 7120 KB Output is correct
32 Correct 7 ms 7120 KB Output is correct
33 Correct 4 ms 6992 KB Output is correct
34 Correct 4 ms 7120 KB Output is correct
35 Correct 5 ms 7120 KB Output is correct
36 Correct 4 ms 7120 KB Output is correct
37 Correct 5 ms 7120 KB Output is correct
38 Correct 5 ms 7104 KB Output is correct
39 Correct 5 ms 7120 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 4 ms 6992 KB Output is correct
3 Correct 4 ms 6992 KB Output is correct
4 Correct 4 ms 6992 KB Output is correct
5 Correct 7 ms 6992 KB Output is correct
6 Correct 7 ms 7120 KB Output is correct
7 Correct 6 ms 7120 KB Output is correct
8 Correct 7 ms 7120 KB Output is correct
9 Correct 5 ms 7168 KB Output is correct
10 Correct 7 ms 7120 KB Output is correct
11 Correct 7 ms 7120 KB Output is correct
12 Correct 7 ms 7120 KB Output is correct
13 Correct 6 ms 7120 KB Output is correct
14 Correct 5 ms 7120 KB Output is correct
15 Correct 7 ms 7120 KB Output is correct
16 Correct 6 ms 7052 KB Output is correct
17 Correct 6 ms 7120 KB Output is correct
18 Correct 4 ms 6980 KB Output is correct
19 Correct 5 ms 6992 KB Output is correct
20 Correct 7 ms 7040 KB Output is correct
21 Correct 8 ms 7120 KB Output is correct
22 Correct 6 ms 7120 KB Output is correct
23 Correct 6 ms 7120 KB Output is correct
24 Correct 6 ms 7120 KB Output is correct
25 Correct 4 ms 6992 KB Output is correct
26 Correct 4 ms 6992 KB Output is correct
27 Correct 5 ms 6992 KB Output is correct
28 Correct 7 ms 7120 KB Output is correct
29 Correct 6 ms 7120 KB Output is correct
30 Correct 6 ms 7120 KB Output is correct
31 Correct 6 ms 7120 KB Output is correct
32 Correct 7 ms 7120 KB Output is correct
33 Correct 4 ms 6992 KB Output is correct
34 Correct 4 ms 7120 KB Output is correct
35 Correct 5 ms 7120 KB Output is correct
36 Correct 4 ms 7120 KB Output is correct
37 Correct 5 ms 7120 KB Output is correct
38 Correct 5 ms 7104 KB Output is correct
39 Correct 5 ms 7120 KB Output is correct
40 Correct 5 ms 6992 KB Output is correct
41 Correct 4 ms 6992 KB Output is correct
42 Correct 5 ms 6992 KB Output is correct
43 Correct 4 ms 6992 KB Output is correct
44 Correct 5 ms 6992 KB Output is correct
45 Correct 6 ms 7120 KB Output is correct
46 Correct 6 ms 7120 KB Output is correct
47 Correct 8 ms 7120 KB Output is correct
48 Correct 6 ms 7120 KB Output is correct
49 Correct 6 ms 7120 KB Output is correct
50 Correct 7 ms 7120 KB Output is correct
51 Correct 6 ms 7128 KB Output is correct
52 Correct 6 ms 7120 KB Output is correct
53 Correct 6 ms 7120 KB Output is correct
54 Correct 7 ms 7120 KB Output is correct
55 Correct 6 ms 7120 KB Output is correct
56 Correct 5 ms 7120 KB Output is correct
57 Correct 4 ms 7096 KB Output is correct
58 Correct 19 ms 11564 KB Output is correct
59 Correct 31 ms 13680 KB Output is correct
60 Correct 10 ms 9296 KB Output is correct
61 Correct 20 ms 13776 KB Output is correct
62 Correct 10 ms 7032 KB Output is correct
63 Correct 19 ms 13776 KB Output is correct
64 Correct 63 ms 13740 KB Output is correct
65 Correct 66 ms 13776 KB Output is correct
66 Correct 64 ms 13748 KB Output is correct
67 Correct 38 ms 13720 KB Output is correct
68 Correct 44 ms 13776 KB Output is correct
69 Correct 30 ms 13776 KB Output is correct
70 Correct 67 ms 13712 KB Output is correct
71 Correct 5 ms 6992 KB Output is correct
72 Correct 5 ms 7040 KB Output is correct
73 Correct 6 ms 7120 KB Output is correct
74 Correct 6 ms 7120 KB Output is correct
75 Correct 6 ms 7120 KB Output is correct
76 Correct 7 ms 7120 KB Output is correct
77 Correct 7 ms 7120 KB Output is correct
78 Correct 5 ms 6992 KB Output is correct
79 Correct 4 ms 6992 KB Output is correct
80 Correct 5 ms 6992 KB Output is correct
81 Correct 7 ms 7120 KB Output is correct
82 Correct 6 ms 7120 KB Output is correct
83 Correct 7 ms 7120 KB Output is correct
84 Correct 7 ms 7120 KB Output is correct
85 Correct 7 ms 7120 KB Output is correct
86 Correct 5 ms 6992 KB Output is correct
87 Correct 5 ms 7120 KB Output is correct
88 Correct 5 ms 7120 KB Output is correct
89 Correct 5 ms 7120 KB Output is correct
90 Correct 5 ms 7120 KB Output is correct
91 Correct 5 ms 7120 KB Output is correct
92 Correct 4 ms 7120 KB Output is correct
93 Correct 4 ms 7120 KB Output is correct
94 Correct 8 ms 7120 KB Output is correct
95 Correct 27 ms 13788 KB Output is correct
96 Correct 27 ms 13776 KB Output is correct
97 Correct 24 ms 13708 KB Output is correct
98 Correct 28 ms 13776 KB Output is correct
99 Correct 25 ms 13776 KB Output is correct
100 Correct 4 ms 7120 KB Output is correct
101 Correct 8 ms 9296 KB Output is correct
102 Correct 29 ms 13732 KB Output is correct
103 Correct 24 ms 13776 KB Output is correct
104 Correct 26 ms 13776 KB Output is correct
105 Correct 27 ms 13776 KB Output is correct
106 Correct 36 ms 13776 KB Output is correct
107 Correct 5 ms 7120 KB Output is correct
108 Correct 6 ms 9296 KB Output is correct
109 Correct 10 ms 13772 KB Output is correct
110 Correct 11 ms 13740 KB Output is correct
111 Correct 10 ms 13776 KB Output is correct
112 Correct 12 ms 13776 KB Output is correct
113 Correct 13 ms 13812 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 6996 KB Output is correct
2 Correct 5 ms 6992 KB Output is correct
3 Correct 5 ms 7036 KB Output is correct
4 Correct 4 ms 6992 KB Output is correct
5 Correct 465 ms 557688 KB Output is correct
6 Correct 595 ms 691468 KB Output is correct
7 Correct 318 ms 357232 KB Output is correct
8 Correct 615 ms 691508 KB Output is correct
9 Correct 95 ms 109640 KB Output is correct
10 Correct 579 ms 691480 KB Output is correct
11 Correct 824 ms 694468 KB Output is correct
12 Correct 718 ms 694828 KB Output is correct
13 Correct 719 ms 694452 KB Output is correct
14 Correct 611 ms 691780 KB Output is correct
15 Correct 767 ms 693456 KB Output is correct
16 Correct 867 ms 694520 KB Output is correct
17 Correct 887 ms 694460 KB Output is correct
18 Correct 4 ms 6992 KB Output is correct
19 Correct 5 ms 7120 KB Output is correct
20 Correct 4 ms 7120 KB Output is correct
21 Correct 5 ms 7120 KB Output is correct
22 Correct 4 ms 7120 KB Output is correct
23 Correct 6 ms 7120 KB Output is correct
24 Correct 5 ms 7120 KB Output is correct
25 Correct 5 ms 7120 KB Output is correct
26 Correct 6 ms 9296 KB Output is correct
27 Correct 10 ms 13776 KB Output is correct
28 Correct 10 ms 13776 KB Output is correct
29 Correct 10 ms 13776 KB Output is correct
30 Correct 11 ms 13812 KB Output is correct
31 Correct 10 ms 13776 KB Output is correct
32 Correct 4 ms 6992 KB Output is correct
33 Correct 593 ms 691524 KB Output is correct
34 Correct 651 ms 691464 KB Output is correct
35 Correct 791 ms 694660 KB Output is correct
36 Correct 677 ms 691764 KB Output is correct
37 Correct 841 ms 693292 KB Output is correct
38 Correct 844 ms 694564 KB Output is correct
39 Correct 5 ms 6992 KB Output is correct
40 Correct 424 ms 403796 KB Output is correct
41 Correct 701 ms 691536 KB Output is correct
42 Correct 854 ms 694488 KB Output is correct
43 Correct 712 ms 691788 KB Output is correct
44 Correct 858 ms 693252 KB Output is correct
45 Correct 963 ms 694728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 6992 KB Output is correct
2 Correct 6 ms 6992 KB Output is correct
3 Correct 6 ms 6992 KB Output is correct
4 Correct 434 ms 319264 KB Output is correct
5 Correct 1607 ms 691440 KB Output is correct
6 Correct 797 ms 118676 KB Output is correct
7 Correct 1576 ms 691536 KB Output is correct
8 Correct 736 ms 241316 KB Output is correct
9 Correct 1366 ms 691532 KB Output is correct
10 Correct 1856 ms 694520 KB Output is correct
11 Correct 1529 ms 695100 KB Output is correct
12 Correct 1652 ms 694552 KB Output is correct
13 Correct 1442 ms 691828 KB Output is correct
14 Correct 1677 ms 693196 KB Output is correct
15 Correct 1617 ms 694588 KB Output is correct
16 Correct 1522 ms 694680 KB Output is correct
17 Correct 6 ms 6992 KB Output is correct
18 Correct 6 ms 6992 KB Output is correct
19 Correct 6 ms 7016 KB Output is correct
20 Correct 10 ms 7120 KB Output is correct
21 Correct 7 ms 7116 KB Output is correct
22 Correct 6 ms 7120 KB Output is correct
23 Correct 6 ms 7120 KB Output is correct
24 Correct 6 ms 7064 KB Output is correct
25 Correct 6 ms 7120 KB Output is correct
26 Correct 7 ms 9296 KB Output is correct
27 Correct 26 ms 13776 KB Output is correct
28 Correct 27 ms 13776 KB Output is correct
29 Correct 28 ms 13784 KB Output is correct
30 Correct 29 ms 13708 KB Output is correct
31 Correct 25 ms 13800 KB Output is correct
32 Correct 6 ms 6992 KB Output is correct
33 Correct 354 ms 403912 KB Output is correct
34 Correct 643 ms 691584 KB Output is correct
35 Correct 857 ms 694444 KB Output is correct
36 Correct 668 ms 691660 KB Output is correct
37 Correct 850 ms 693256 KB Output is correct
38 Correct 876 ms 694732 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 6992 KB Output is correct
2 Correct 6 ms 6992 KB Output is correct
3 Correct 6 ms 6992 KB Output is correct
4 Correct 434 ms 319264 KB Output is correct
5 Correct 1607 ms 691440 KB Output is correct
6 Correct 797 ms 118676 KB Output is correct
7 Correct 1576 ms 691536 KB Output is correct
8 Correct 736 ms 241316 KB Output is correct
9 Correct 1366 ms 691532 KB Output is correct
10 Correct 1856 ms 694520 KB Output is correct
11 Correct 1529 ms 695100 KB Output is correct
12 Correct 1652 ms 694552 KB Output is correct
13 Correct 1442 ms 691828 KB Output is correct
14 Correct 1677 ms 693196 KB Output is correct
15 Correct 1617 ms 694588 KB Output is correct
16 Correct 1522 ms 694680 KB Output is correct
17 Correct 6 ms 6992 KB Output is correct
18 Correct 6 ms 6992 KB Output is correct
19 Correct 6 ms 7016 KB Output is correct
20 Correct 10 ms 7120 KB Output is correct
21 Correct 7 ms 7116 KB Output is correct
22 Correct 6 ms 7120 KB Output is correct
23 Correct 6 ms 7120 KB Output is correct
24 Correct 6 ms 7064 KB Output is correct
25 Correct 6 ms 7120 KB Output is correct
26 Correct 7 ms 9296 KB Output is correct
27 Correct 26 ms 13776 KB Output is correct
28 Correct 27 ms 13776 KB Output is correct
29 Correct 28 ms 13784 KB Output is correct
30 Correct 29 ms 13708 KB Output is correct
31 Correct 25 ms 13800 KB Output is correct
32 Correct 6 ms 6992 KB Output is correct
33 Correct 354 ms 403912 KB Output is correct
34 Correct 643 ms 691584 KB Output is correct
35 Correct 857 ms 694444 KB Output is correct
36 Correct 668 ms 691660 KB Output is correct
37 Correct 850 ms 693256 KB Output is correct
38 Correct 876 ms 694732 KB Output is correct
39 Correct 4 ms 6992 KB Output is correct
40 Correct 4 ms 6992 KB Output is correct
41 Correct 4 ms 6992 KB Output is correct
42 Correct 459 ms 319288 KB Output is correct
43 Correct 1494 ms 691560 KB Output is correct
44 Correct 684 ms 118664 KB Output is correct
45 Correct 1687 ms 691540 KB Output is correct
46 Correct 754 ms 241240 KB Output is correct
47 Correct 1470 ms 691460 KB Output is correct
48 Correct 1801 ms 694352 KB Output is correct
49 Correct 1648 ms 695028 KB Output is correct
50 Correct 1896 ms 694388 KB Output is correct
51 Correct 1624 ms 691772 KB Output is correct
52 Correct 1900 ms 693188 KB Output is correct
53 Correct 1900 ms 694520 KB Output is correct
54 Correct 1867 ms 694528 KB Output is correct
55 Correct 6 ms 6992 KB Output is correct
56 Correct 875 ms 689276 KB Output is correct
57 Correct 1659 ms 691452 KB Output is correct
58 Correct 528 ms 125400 KB Output is correct
59 Correct 1551 ms 691528 KB Output is correct
60 Correct 602 ms 250132 KB Output is correct
61 Correct 1532 ms 691540 KB Output is correct
62 Correct 2015 ms 694436 KB Output is correct
63 Correct 2055 ms 694788 KB Output is correct
64 Correct 1929 ms 694588 KB Output is correct
65 Correct 1707 ms 691688 KB Output is correct
66 Correct 1710 ms 693184 KB Output is correct
67 Correct 1925 ms 694900 KB Output is correct
68 Correct 1920 ms 694516 KB Output is correct
69 Correct 6 ms 6992 KB Output is correct
70 Correct 7 ms 7120 KB Output is correct
71 Correct 7 ms 7152 KB Output is correct
72 Correct 10 ms 7120 KB Output is correct
73 Correct 10 ms 7120 KB Output is correct
74 Correct 8 ms 7120 KB Output is correct
75 Correct 10 ms 7120 KB Output is correct
76 Correct 5 ms 7072 KB Output is correct
77 Correct 7 ms 7012 KB Output is correct
78 Correct 8 ms 6992 KB Output is correct
79 Correct 7 ms 7120 KB Output is correct
80 Correct 8 ms 7120 KB Output is correct
81 Correct 6 ms 7120 KB Output is correct
82 Correct 6 ms 7120 KB Output is correct
83 Correct 9 ms 7080 KB Output is correct
84 Correct 5 ms 7120 KB Output is correct
85 Correct 8 ms 7120 KB Output is correct
86 Correct 36 ms 13764 KB Output is correct
87 Correct 35 ms 13776 KB Output is correct
88 Correct 24 ms 13776 KB Output is correct
89 Correct 27 ms 13712 KB Output is correct
90 Correct 28 ms 13772 KB Output is correct
91 Correct 6 ms 7120 KB Output is correct
92 Correct 6 ms 9296 KB Output is correct
93 Correct 40 ms 13776 KB Output is correct
94 Correct 27 ms 13824 KB Output is correct
95 Correct 39 ms 13776 KB Output is correct
96 Correct 38 ms 13708 KB Output is correct
97 Correct 39 ms 13776 KB Output is correct
98 Correct 6 ms 6992 KB Output is correct
99 Correct 764 ms 691456 KB Output is correct
100 Correct 748 ms 691504 KB Output is correct
101 Correct 854 ms 694616 KB Output is correct
102 Correct 791 ms 691732 KB Output is correct
103 Correct 956 ms 693292 KB Output is correct
104 Correct 979 ms 694648 KB Output is correct
105 Correct 7 ms 6992 KB Output is correct
106 Correct 446 ms 403912 KB Output is correct
107 Correct 711 ms 691484 KB Output is correct
108 Correct 913 ms 694448 KB Output is correct
109 Correct 809 ms 691664 KB Output is correct
110 Correct 948 ms 693208 KB Output is correct
111 Correct 920 ms 694716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 4 ms 6992 KB Output is correct
3 Correct 1582 ms 553436 KB Output is correct
4 Execution timed out 4121 ms 694364 KB Time limit exceeded
5 Halted 0 ms 0 KB -