Submission #567346

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

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

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

const int B = 700;
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 6 ms 6992 KB Output is correct
3 Correct 1813 ms 518508 KB Output is correct
4 Execution timed out 4070 ms 649132 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 6992 KB Output is correct
2 Correct 7 ms 7080 KB Output is correct
3 Correct 6 ms 7040 KB Output is correct
4 Correct 5 ms 7072 KB Output is correct
5 Correct 6 ms 6992 KB Output is correct
6 Correct 6 ms 7120 KB Output is correct
7 Correct 5 ms 7120 KB Output is correct
8 Correct 8 ms 7120 KB Output is correct
9 Correct 5 ms 7120 KB Output is correct
10 Correct 6 ms 7120 KB Output is correct
11 Correct 6 ms 7120 KB Output is correct
12 Correct 9 ms 7120 KB Output is correct
13 Correct 7 ms 7120 KB Output is correct
14 Correct 7 ms 7120 KB Output is correct
15 Correct 7 ms 7120 KB Output is correct
16 Correct 7 ms 7168 KB Output is correct
17 Correct 7 ms 7120 KB Output is correct
18 Correct 6 ms 6992 KB Output is correct
19 Correct 5 ms 7120 KB Output is correct
20 Correct 6 ms 7148 KB Output is correct
21 Correct 5 ms 7060 KB Output is correct
22 Correct 6 ms 7120 KB Output is correct
23 Correct 8 ms 7120 KB Output is correct
24 Correct 6 ms 7120 KB Output is correct
25 Correct 5 ms 6992 KB Output is correct
26 Correct 5 ms 6992 KB Output is correct
27 Correct 5 ms 6992 KB Output is correct
28 Correct 8 ms 7120 KB Output is correct
29 Correct 7 ms 7120 KB Output is correct
30 Correct 7 ms 7120 KB Output is correct
31 Correct 8 ms 7176 KB Output is correct
32 Correct 7 ms 7120 KB Output is correct
33 Correct 5 ms 7040 KB Output is correct
34 Correct 5 ms 7120 KB Output is correct
35 Correct 5 ms 7120 KB Output is correct
36 Correct 7 ms 7120 KB Output is correct
37 Correct 6 ms 7120 KB Output is correct
38 Correct 5 ms 7120 KB Output is correct
39 Correct 6 ms 7092 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 6992 KB Output is correct
2 Correct 7 ms 7080 KB Output is correct
3 Correct 6 ms 7040 KB Output is correct
4 Correct 5 ms 7072 KB Output is correct
5 Correct 6 ms 6992 KB Output is correct
6 Correct 6 ms 7120 KB Output is correct
7 Correct 5 ms 7120 KB Output is correct
8 Correct 8 ms 7120 KB Output is correct
9 Correct 5 ms 7120 KB Output is correct
10 Correct 6 ms 7120 KB Output is correct
11 Correct 6 ms 7120 KB Output is correct
12 Correct 9 ms 7120 KB Output is correct
13 Correct 7 ms 7120 KB Output is correct
14 Correct 7 ms 7120 KB Output is correct
15 Correct 7 ms 7120 KB Output is correct
16 Correct 7 ms 7168 KB Output is correct
17 Correct 7 ms 7120 KB Output is correct
18 Correct 6 ms 6992 KB Output is correct
19 Correct 5 ms 7120 KB Output is correct
20 Correct 6 ms 7148 KB Output is correct
21 Correct 5 ms 7060 KB Output is correct
22 Correct 6 ms 7120 KB Output is correct
23 Correct 8 ms 7120 KB Output is correct
24 Correct 6 ms 7120 KB Output is correct
25 Correct 5 ms 6992 KB Output is correct
26 Correct 5 ms 6992 KB Output is correct
27 Correct 5 ms 6992 KB Output is correct
28 Correct 8 ms 7120 KB Output is correct
29 Correct 7 ms 7120 KB Output is correct
30 Correct 7 ms 7120 KB Output is correct
31 Correct 8 ms 7176 KB Output is correct
32 Correct 7 ms 7120 KB Output is correct
33 Correct 5 ms 7040 KB Output is correct
34 Correct 5 ms 7120 KB Output is correct
35 Correct 5 ms 7120 KB Output is correct
36 Correct 7 ms 7120 KB Output is correct
37 Correct 6 ms 7120 KB Output is correct
38 Correct 5 ms 7120 KB Output is correct
39 Correct 6 ms 7092 KB Output is correct
40 Correct 7 ms 7040 KB Output is correct
41 Correct 5 ms 6992 KB Output is correct
42 Correct 6 ms 7040 KB Output is correct
43 Correct 4 ms 7040 KB Output is correct
44 Correct 7 ms 6992 KB Output is correct
45 Correct 7 ms 7120 KB Output is correct
46 Correct 6 ms 7120 KB Output is correct
47 Correct 8 ms 7168 KB Output is correct
48 Correct 5 ms 7120 KB Output is correct
49 Correct 8 ms 7160 KB Output is correct
50 Correct 7 ms 7168 KB Output is correct
51 Correct 10 ms 7120 KB Output is correct
52 Correct 6 ms 7168 KB Output is correct
53 Correct 6 ms 7120 KB Output is correct
54 Correct 8 ms 7120 KB Output is correct
55 Correct 9 ms 7124 KB Output is correct
56 Correct 9 ms 7120 KB Output is correct
57 Correct 5 ms 7120 KB Output is correct
58 Correct 20 ms 11600 KB Output is correct
59 Correct 23 ms 11728 KB Output is correct
60 Correct 14 ms 9344 KB Output is correct
61 Correct 21 ms 11764 KB Output is correct
62 Correct 15 ms 7120 KB Output is correct
63 Correct 30 ms 11724 KB Output is correct
64 Correct 74 ms 11792 KB Output is correct
65 Correct 78 ms 11728 KB Output is correct
66 Correct 74 ms 11780 KB Output is correct
67 Correct 26 ms 11728 KB Output is correct
68 Correct 49 ms 11760 KB Output is correct
69 Correct 34 ms 11680 KB Output is correct
70 Correct 69 ms 11728 KB Output is correct
71 Correct 5 ms 6992 KB Output is correct
72 Correct 5 ms 7120 KB Output is correct
73 Correct 7 ms 7172 KB Output is correct
74 Correct 6 ms 7120 KB Output is correct
75 Correct 7 ms 7120 KB Output is correct
76 Correct 6 ms 7120 KB Output is correct
77 Correct 9 ms 7120 KB Output is correct
78 Correct 4 ms 6992 KB Output is correct
79 Correct 4 ms 7040 KB Output is correct
80 Correct 5 ms 6992 KB Output is correct
81 Correct 7 ms 7120 KB Output is correct
82 Correct 7 ms 7120 KB Output is correct
83 Correct 7 ms 7120 KB Output is correct
84 Correct 7 ms 7168 KB Output is correct
85 Correct 8 ms 7164 KB Output is correct
86 Correct 6 ms 6992 KB Output is correct
87 Correct 6 ms 7168 KB Output is correct
88 Correct 4 ms 7128 KB Output is correct
89 Correct 5 ms 7120 KB Output is correct
90 Correct 5 ms 7168 KB Output is correct
91 Correct 6 ms 7036 KB Output is correct
92 Correct 6 ms 7248 KB Output is correct
93 Correct 5 ms 7168 KB Output is correct
94 Correct 10 ms 7120 KB Output is correct
95 Correct 23 ms 11728 KB Output is correct
96 Correct 30 ms 11784 KB Output is correct
97 Correct 28 ms 11660 KB Output is correct
98 Correct 22 ms 11728 KB Output is correct
99 Correct 34 ms 11676 KB Output is correct
100 Correct 5 ms 7120 KB Output is correct
101 Correct 7 ms 9296 KB Output is correct
102 Correct 24 ms 11728 KB Output is correct
103 Correct 28 ms 11728 KB Output is correct
104 Correct 21 ms 11632 KB Output is correct
105 Correct 35 ms 11728 KB Output is correct
106 Correct 24 ms 11708 KB Output is correct
107 Correct 4 ms 7120 KB Output is correct
108 Correct 7 ms 9340 KB Output is correct
109 Correct 7 ms 11728 KB Output is correct
110 Correct 9 ms 11728 KB Output is correct
111 Correct 10 ms 11728 KB Output is correct
112 Correct 9 ms 11696 KB Output is correct
113 Correct 9 ms 11660 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 5 ms 6992 KB Output is correct
3 Correct 4 ms 6992 KB Output is correct
4 Correct 5 ms 6992 KB Output is correct
5 Correct 555 ms 520840 KB Output is correct
6 Correct 651 ms 646132 KB Output is correct
7 Correct 282 ms 334472 KB Output is correct
8 Correct 662 ms 646224 KB Output is correct
9 Correct 83 ms 103512 KB Output is correct
10 Correct 701 ms 646264 KB Output is correct
11 Correct 858 ms 649128 KB Output is correct
12 Correct 766 ms 649476 KB Output is correct
13 Correct 847 ms 649208 KB Output is correct
14 Correct 766 ms 646424 KB Output is correct
15 Correct 853 ms 647888 KB Output is correct
16 Correct 962 ms 649172 KB Output is correct
17 Correct 975 ms 649084 KB Output is correct
18 Correct 5 ms 6992 KB Output is correct
19 Correct 5 ms 7152 KB Output is correct
20 Correct 5 ms 7120 KB Output is correct
21 Correct 5 ms 7120 KB Output is correct
22 Correct 6 ms 7168 KB Output is correct
23 Correct 5 ms 7120 KB Output is correct
24 Correct 6 ms 7168 KB Output is correct
25 Correct 7 ms 7120 KB Output is correct
26 Correct 8 ms 9336 KB Output is correct
27 Correct 13 ms 11736 KB Output is correct
28 Correct 9 ms 11660 KB Output is correct
29 Correct 13 ms 11728 KB Output is correct
30 Correct 11 ms 11760 KB Output is correct
31 Correct 10 ms 11784 KB Output is correct
32 Correct 5 ms 6992 KB Output is correct
33 Correct 805 ms 646136 KB Output is correct
34 Correct 692 ms 646272 KB Output is correct
35 Correct 935 ms 649192 KB Output is correct
36 Correct 650 ms 646400 KB Output is correct
37 Correct 920 ms 647996 KB Output is correct
38 Correct 889 ms 649316 KB Output is correct
39 Correct 5 ms 7120 KB Output is correct
40 Correct 461 ms 377080 KB Output is correct
41 Correct 787 ms 646216 KB Output is correct
42 Correct 927 ms 649092 KB Output is correct
43 Correct 733 ms 646500 KB Output is correct
44 Correct 888 ms 647912 KB Output is correct
45 Correct 919 ms 649344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 6992 KB Output is correct
2 Correct 5 ms 6992 KB Output is correct
3 Correct 7 ms 6992 KB Output is correct
4 Correct 547 ms 298656 KB Output is correct
5 Correct 1535 ms 646216 KB Output is correct
6 Correct 726 ms 112488 KB Output is correct
7 Correct 1613 ms 646256 KB Output is correct
8 Correct 785 ms 226872 KB Output is correct
9 Correct 1751 ms 646240 KB Output is correct
10 Correct 2165 ms 649140 KB Output is correct
11 Correct 2092 ms 649788 KB Output is correct
12 Correct 2149 ms 649220 KB Output is correct
13 Correct 1541 ms 646484 KB Output is correct
14 Correct 2115 ms 648032 KB Output is correct
15 Correct 1970 ms 649264 KB Output is correct
16 Correct 1864 ms 649272 KB Output is correct
17 Correct 5 ms 6992 KB Output is correct
18 Correct 5 ms 6992 KB Output is correct
19 Correct 6 ms 6992 KB Output is correct
20 Correct 6 ms 7120 KB Output is correct
21 Correct 7 ms 7120 KB Output is correct
22 Correct 7 ms 7120 KB Output is correct
23 Correct 8 ms 7120 KB Output is correct
24 Correct 6 ms 7120 KB Output is correct
25 Correct 5 ms 7120 KB Output is correct
26 Correct 9 ms 9296 KB Output is correct
27 Correct 28 ms 11716 KB Output is correct
28 Correct 37 ms 11672 KB Output is correct
29 Correct 31 ms 11728 KB Output is correct
30 Correct 18 ms 11668 KB Output is correct
31 Correct 24 ms 11728 KB Output is correct
32 Correct 5 ms 6992 KB Output is correct
33 Correct 425 ms 377164 KB Output is correct
34 Correct 734 ms 646192 KB Output is correct
35 Correct 844 ms 649124 KB Output is correct
36 Correct 727 ms 646412 KB Output is correct
37 Correct 920 ms 648004 KB Output is correct
38 Correct 906 ms 649444 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 6992 KB Output is correct
2 Correct 5 ms 6992 KB Output is correct
3 Correct 7 ms 6992 KB Output is correct
4 Correct 547 ms 298656 KB Output is correct
5 Correct 1535 ms 646216 KB Output is correct
6 Correct 726 ms 112488 KB Output is correct
7 Correct 1613 ms 646256 KB Output is correct
8 Correct 785 ms 226872 KB Output is correct
9 Correct 1751 ms 646240 KB Output is correct
10 Correct 2165 ms 649140 KB Output is correct
11 Correct 2092 ms 649788 KB Output is correct
12 Correct 2149 ms 649220 KB Output is correct
13 Correct 1541 ms 646484 KB Output is correct
14 Correct 2115 ms 648032 KB Output is correct
15 Correct 1970 ms 649264 KB Output is correct
16 Correct 1864 ms 649272 KB Output is correct
17 Correct 5 ms 6992 KB Output is correct
18 Correct 5 ms 6992 KB Output is correct
19 Correct 6 ms 6992 KB Output is correct
20 Correct 6 ms 7120 KB Output is correct
21 Correct 7 ms 7120 KB Output is correct
22 Correct 7 ms 7120 KB Output is correct
23 Correct 8 ms 7120 KB Output is correct
24 Correct 6 ms 7120 KB Output is correct
25 Correct 5 ms 7120 KB Output is correct
26 Correct 9 ms 9296 KB Output is correct
27 Correct 28 ms 11716 KB Output is correct
28 Correct 37 ms 11672 KB Output is correct
29 Correct 31 ms 11728 KB Output is correct
30 Correct 18 ms 11668 KB Output is correct
31 Correct 24 ms 11728 KB Output is correct
32 Correct 5 ms 6992 KB Output is correct
33 Correct 425 ms 377164 KB Output is correct
34 Correct 734 ms 646192 KB Output is correct
35 Correct 844 ms 649124 KB Output is correct
36 Correct 727 ms 646412 KB Output is correct
37 Correct 920 ms 648004 KB Output is correct
38 Correct 906 ms 649444 KB Output is correct
39 Correct 6 ms 7032 KB Output is correct
40 Correct 6 ms 6992 KB Output is correct
41 Correct 5 ms 6992 KB Output is correct
42 Correct 553 ms 298708 KB Output is correct
43 Correct 1675 ms 646172 KB Output is correct
44 Correct 704 ms 112452 KB Output is correct
45 Correct 1289 ms 646260 KB Output is correct
46 Correct 640 ms 226908 KB Output is correct
47 Correct 1531 ms 646132 KB Output is correct
48 Correct 1677 ms 649192 KB Output is correct
49 Correct 1903 ms 649728 KB Output is correct
50 Correct 1872 ms 649180 KB Output is correct
51 Correct 1554 ms 646444 KB Output is correct
52 Correct 1777 ms 647960 KB Output is correct
53 Correct 1667 ms 649256 KB Output is correct
54 Correct 1453 ms 649240 KB Output is correct
55 Correct 5 ms 6992 KB Output is correct
56 Correct 677 ms 643968 KB Output is correct
57 Correct 1449 ms 646156 KB Output is correct
58 Correct 492 ms 119240 KB Output is correct
59 Correct 1477 ms 646136 KB Output is correct
60 Correct 605 ms 233568 KB Output is correct
61 Correct 1505 ms 646256 KB Output is correct
62 Correct 2032 ms 649076 KB Output is correct
63 Correct 1750 ms 649504 KB Output is correct
64 Correct 1790 ms 649388 KB Output is correct
65 Correct 1569 ms 646568 KB Output is correct
66 Correct 1640 ms 647912 KB Output is correct
67 Correct 1922 ms 649580 KB Output is correct
68 Correct 1803 ms 649180 KB Output is correct
69 Correct 5 ms 6992 KB Output is correct
70 Correct 7 ms 7120 KB Output is correct
71 Correct 8 ms 7048 KB Output is correct
72 Correct 8 ms 7120 KB Output is correct
73 Correct 8 ms 7120 KB Output is correct
74 Correct 9 ms 7120 KB Output is correct
75 Correct 7 ms 7168 KB Output is correct
76 Correct 5 ms 6992 KB Output is correct
77 Correct 5 ms 6992 KB Output is correct
78 Correct 7 ms 6992 KB Output is correct
79 Correct 23 ms 7124 KB Output is correct
80 Correct 9 ms 7120 KB Output is correct
81 Correct 9 ms 7120 KB Output is correct
82 Correct 7 ms 7120 KB Output is correct
83 Correct 6 ms 7120 KB Output is correct
84 Correct 6 ms 7124 KB Output is correct
85 Correct 11 ms 7120 KB Output is correct
86 Correct 34 ms 11728 KB Output is correct
87 Correct 38 ms 11728 KB Output is correct
88 Correct 22 ms 11728 KB Output is correct
89 Correct 23 ms 11772 KB Output is correct
90 Correct 22 ms 11728 KB Output is correct
91 Correct 5 ms 7168 KB Output is correct
92 Correct 9 ms 9372 KB Output is correct
93 Correct 30 ms 11756 KB Output is correct
94 Correct 26 ms 11728 KB Output is correct
95 Correct 35 ms 11780 KB Output is correct
96 Correct 36 ms 11728 KB Output is correct
97 Correct 35 ms 11728 KB Output is correct
98 Correct 7 ms 7108 KB Output is correct
99 Correct 716 ms 646180 KB Output is correct
100 Correct 711 ms 646364 KB Output is correct
101 Correct 830 ms 649128 KB Output is correct
102 Correct 784 ms 646512 KB Output is correct
103 Correct 926 ms 647892 KB Output is correct
104 Correct 921 ms 649324 KB Output is correct
105 Correct 7 ms 6992 KB Output is correct
106 Correct 440 ms 377124 KB Output is correct
107 Correct 705 ms 646196 KB Output is correct
108 Correct 865 ms 649204 KB Output is correct
109 Correct 711 ms 646504 KB Output is correct
110 Correct 944 ms 647916 KB Output is correct
111 Correct 874 ms 649324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 6 ms 6992 KB Output is correct
3 Correct 1813 ms 518508 KB Output is correct
4 Execution timed out 4070 ms 649132 KB Time limit exceeded
5 Halted 0 ms 0 KB -