Submission #567355

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

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

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

const int B = 635;
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 5 ms 6992 KB Output is correct
3 Correct 1732 ms 565732 KB Output is correct
4 Execution timed out 4062 ms 708904 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 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 5 ms 6992 KB Output is correct
4 Correct 5 ms 6992 KB Output is correct
5 Correct 6 ms 6992 KB Output is correct
6 Correct 7 ms 7120 KB Output is correct
7 Correct 7 ms 7120 KB Output is correct
8 Correct 7 ms 7120 KB Output is correct
9 Correct 5 ms 7120 KB Output is correct
10 Correct 7 ms 7032 KB Output is correct
11 Correct 12 ms 7120 KB Output is correct
12 Correct 9 ms 7048 KB Output is correct
13 Correct 9 ms 7120 KB Output is correct
14 Correct 7 ms 7120 KB Output is correct
15 Correct 6 ms 7120 KB Output is correct
16 Correct 6 ms 7120 KB Output is correct
17 Correct 7 ms 7120 KB Output is correct
18 Correct 7 ms 6992 KB Output is correct
19 Correct 7 ms 7028 KB Output is correct
20 Correct 6 ms 7120 KB Output is correct
21 Correct 9 ms 7120 KB Output is correct
22 Correct 7 ms 7120 KB Output is correct
23 Correct 7 ms 7120 KB Output is correct
24 Correct 8 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 6 ms 6992 KB Output is correct
28 Correct 6 ms 7120 KB Output is correct
29 Correct 7 ms 7120 KB Output is correct
30 Correct 5 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 5 ms 7096 KB Output is correct
34 Correct 5 ms 7056 KB Output is correct
35 Correct 5 ms 7120 KB Output is correct
36 Correct 5 ms 7084 KB Output is correct
37 Correct 5 ms 7044 KB Output is correct
38 Correct 7 ms 7120 KB Output is correct
39 Correct 5 ms 7120 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 5 ms 6992 KB Output is correct
4 Correct 5 ms 6992 KB Output is correct
5 Correct 6 ms 6992 KB Output is correct
6 Correct 7 ms 7120 KB Output is correct
7 Correct 7 ms 7120 KB Output is correct
8 Correct 7 ms 7120 KB Output is correct
9 Correct 5 ms 7120 KB Output is correct
10 Correct 7 ms 7032 KB Output is correct
11 Correct 12 ms 7120 KB Output is correct
12 Correct 9 ms 7048 KB Output is correct
13 Correct 9 ms 7120 KB Output is correct
14 Correct 7 ms 7120 KB Output is correct
15 Correct 6 ms 7120 KB Output is correct
16 Correct 6 ms 7120 KB Output is correct
17 Correct 7 ms 7120 KB Output is correct
18 Correct 7 ms 6992 KB Output is correct
19 Correct 7 ms 7028 KB Output is correct
20 Correct 6 ms 7120 KB Output is correct
21 Correct 9 ms 7120 KB Output is correct
22 Correct 7 ms 7120 KB Output is correct
23 Correct 7 ms 7120 KB Output is correct
24 Correct 8 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 6 ms 6992 KB Output is correct
28 Correct 6 ms 7120 KB Output is correct
29 Correct 7 ms 7120 KB Output is correct
30 Correct 5 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 5 ms 7096 KB Output is correct
34 Correct 5 ms 7056 KB Output is correct
35 Correct 5 ms 7120 KB Output is correct
36 Correct 5 ms 7084 KB Output is correct
37 Correct 5 ms 7044 KB Output is correct
38 Correct 7 ms 7120 KB Output is correct
39 Correct 5 ms 7120 KB Output is correct
40 Correct 5 ms 6992 KB Output is correct
41 Correct 5 ms 6992 KB Output is correct
42 Correct 11 ms 7096 KB Output is correct
43 Correct 6 ms 6992 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 7 ms 7120 KB Output is correct
48 Correct 6 ms 7120 KB Output is correct
49 Correct 7 ms 7120 KB Output is correct
50 Correct 11 ms 7120 KB Output is correct
51 Correct 6 ms 7120 KB Output is correct
52 Correct 7 ms 7120 KB Output is correct
53 Correct 8 ms 7120 KB Output is correct
54 Correct 8 ms 7120 KB Output is correct
55 Correct 8 ms 7120 KB Output is correct
56 Correct 5 ms 7120 KB Output is correct
57 Correct 5 ms 7072 KB Output is correct
58 Correct 27 ms 11576 KB Output is correct
59 Correct 30 ms 13776 KB Output is correct
60 Correct 10 ms 9296 KB Output is correct
61 Correct 28 ms 13776 KB Output is correct
62 Correct 17 ms 7120 KB Output is correct
63 Correct 31 ms 13776 KB Output is correct
64 Correct 66 ms 13776 KB Output is correct
65 Correct 74 ms 13776 KB Output is correct
66 Correct 60 ms 13776 KB Output is correct
67 Correct 27 ms 13776 KB Output is correct
68 Correct 49 ms 13776 KB Output is correct
69 Correct 30 ms 13776 KB Output is correct
70 Correct 62 ms 13776 KB Output is correct
71 Correct 4 ms 6992 KB Output is correct
72 Correct 4 ms 7120 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 6 ms 7120 KB Output is correct
77 Correct 7 ms 7056 KB Output is correct
78 Correct 4 ms 6992 KB Output is correct
79 Correct 4 ms 6992 KB Output is correct
80 Correct 6 ms 6992 KB Output is correct
81 Correct 6 ms 7120 KB Output is correct
82 Correct 6 ms 7120 KB Output is correct
83 Correct 6 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 4 ms 6992 KB Output is correct
87 Correct 4 ms 7120 KB Output is correct
88 Correct 6 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 6 ms 7120 KB Output is correct
92 Correct 5 ms 7120 KB Output is correct
93 Correct 5 ms 7120 KB Output is correct
94 Correct 9 ms 7120 KB Output is correct
95 Correct 36 ms 13776 KB Output is correct
96 Correct 31 ms 13776 KB Output is correct
97 Correct 25 ms 13728 KB Output is correct
98 Correct 27 ms 13776 KB Output is correct
99 Correct 27 ms 13776 KB Output is correct
100 Correct 4 ms 7120 KB Output is correct
101 Correct 6 ms 9280 KB Output is correct
102 Correct 27 ms 13680 KB Output is correct
103 Correct 24 ms 13776 KB Output is correct
104 Correct 30 ms 13716 KB Output is correct
105 Correct 26 ms 13732 KB Output is correct
106 Correct 26 ms 13776 KB Output is correct
107 Correct 4 ms 7120 KB Output is correct
108 Correct 6 ms 9296 KB Output is correct
109 Correct 10 ms 13776 KB Output is correct
110 Correct 9 ms 13776 KB Output is correct
111 Correct 10 ms 13776 KB Output is correct
112 Correct 10 ms 13776 KB Output is correct
113 Correct 9 ms 13776 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 6992 KB Output is correct
2 Correct 6 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 530 ms 570068 KB Output is correct
6 Correct 608 ms 705856 KB Output is correct
7 Correct 340 ms 365296 KB Output is correct
8 Correct 614 ms 705848 KB Output is correct
9 Correct 88 ms 111688 KB Output is correct
10 Correct 617 ms 706036 KB Output is correct
11 Correct 862 ms 708848 KB Output is correct
12 Correct 750 ms 709052 KB Output is correct
13 Correct 765 ms 708876 KB Output is correct
14 Correct 607 ms 706356 KB Output is correct
15 Correct 791 ms 707736 KB Output is correct
16 Correct 853 ms 708872 KB Output is correct
17 Correct 880 ms 709000 KB Output is correct
18 Correct 4 ms 6992 KB Output is correct
19 Correct 4 ms 7120 KB Output is correct
20 Correct 4 ms 7120 KB Output is correct
21 Correct 4 ms 7120 KB Output is correct
22 Correct 5 ms 7120 KB Output is correct
23 Correct 5 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 9 ms 13776 KB Output is correct
28 Correct 10 ms 13776 KB Output is correct
29 Correct 10 ms 13700 KB Output is correct
30 Correct 10 ms 13904 KB Output is correct
31 Correct 10 ms 13776 KB Output is correct
32 Correct 5 ms 6992 KB Output is correct
33 Correct 616 ms 705856 KB Output is correct
34 Correct 599 ms 705848 KB Output is correct
35 Correct 727 ms 708848 KB Output is correct
36 Correct 610 ms 706248 KB Output is correct
37 Correct 782 ms 707728 KB Output is correct
38 Correct 809 ms 709180 KB Output is correct
39 Correct 5 ms 6992 KB Output is correct
40 Correct 393 ms 412160 KB Output is correct
41 Correct 634 ms 706112 KB Output is correct
42 Correct 774 ms 708900 KB Output is correct
43 Correct 627 ms 706200 KB Output is correct
44 Correct 797 ms 707704 KB Output is correct
45 Correct 806 ms 709136 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 5 ms 7120 KB Output is correct
3 Correct 4 ms 6992 KB Output is correct
4 Correct 442 ms 325488 KB Output is correct
5 Correct 1300 ms 706080 KB Output is correct
6 Correct 592 ms 120680 KB Output is correct
7 Correct 1236 ms 706060 KB Output is correct
8 Correct 666 ms 247368 KB Output is correct
9 Correct 1165 ms 705904 KB Output is correct
10 Correct 1666 ms 708884 KB Output is correct
11 Correct 1720 ms 709520 KB Output is correct
12 Correct 1460 ms 709096 KB Output is correct
13 Correct 1212 ms 706392 KB Output is correct
14 Correct 1561 ms 707776 KB Output is correct
15 Correct 1540 ms 709052 KB Output is correct
16 Correct 1551 ms 708924 KB Output is correct
17 Correct 4 ms 6992 KB Output is correct
18 Correct 4 ms 6992 KB Output is correct
19 Correct 5 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 6 ms 7120 KB Output is correct
23 Correct 7 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 7 ms 9244 KB Output is correct
27 Correct 25 ms 13784 KB Output is correct
28 Correct 18 ms 13776 KB Output is correct
29 Correct 27 ms 13776 KB Output is correct
30 Correct 28 ms 13776 KB Output is correct
31 Correct 25 ms 13804 KB Output is correct
32 Correct 4 ms 6992 KB Output is correct
33 Correct 354 ms 412360 KB Output is correct
34 Correct 659 ms 705992 KB Output is correct
35 Correct 753 ms 708928 KB Output is correct
36 Correct 599 ms 706084 KB Output is correct
37 Correct 792 ms 707624 KB Output is correct
38 Correct 807 ms 709116 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6992 KB Output is correct
2 Correct 5 ms 7120 KB Output is correct
3 Correct 4 ms 6992 KB Output is correct
4 Correct 442 ms 325488 KB Output is correct
5 Correct 1300 ms 706080 KB Output is correct
6 Correct 592 ms 120680 KB Output is correct
7 Correct 1236 ms 706060 KB Output is correct
8 Correct 666 ms 247368 KB Output is correct
9 Correct 1165 ms 705904 KB Output is correct
10 Correct 1666 ms 708884 KB Output is correct
11 Correct 1720 ms 709520 KB Output is correct
12 Correct 1460 ms 709096 KB Output is correct
13 Correct 1212 ms 706392 KB Output is correct
14 Correct 1561 ms 707776 KB Output is correct
15 Correct 1540 ms 709052 KB Output is correct
16 Correct 1551 ms 708924 KB Output is correct
17 Correct 4 ms 6992 KB Output is correct
18 Correct 4 ms 6992 KB Output is correct
19 Correct 5 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 6 ms 7120 KB Output is correct
23 Correct 7 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 7 ms 9244 KB Output is correct
27 Correct 25 ms 13784 KB Output is correct
28 Correct 18 ms 13776 KB Output is correct
29 Correct 27 ms 13776 KB Output is correct
30 Correct 28 ms 13776 KB Output is correct
31 Correct 25 ms 13804 KB Output is correct
32 Correct 4 ms 6992 KB Output is correct
33 Correct 354 ms 412360 KB Output is correct
34 Correct 659 ms 705992 KB Output is correct
35 Correct 753 ms 708928 KB Output is correct
36 Correct 599 ms 706084 KB Output is correct
37 Correct 792 ms 707624 KB Output is correct
38 Correct 807 ms 709116 KB Output is correct
39 Correct 5 ms 7120 KB Output is correct
40 Correct 4 ms 6992 KB Output is correct
41 Correct 4 ms 6992 KB Output is correct
42 Correct 428 ms 325556 KB Output is correct
43 Correct 1310 ms 705868 KB Output is correct
44 Correct 669 ms 120648 KB Output is correct
45 Correct 1296 ms 705920 KB Output is correct
46 Correct 638 ms 247420 KB Output is correct
47 Correct 1206 ms 705852 KB Output is correct
48 Correct 1712 ms 708860 KB Output is correct
49 Correct 1352 ms 709488 KB Output is correct
50 Correct 1455 ms 708968 KB Output is correct
51 Correct 1353 ms 706240 KB Output is correct
52 Correct 1615 ms 707748 KB Output is correct
53 Correct 1533 ms 709128 KB Output is correct
54 Correct 1579 ms 708980 KB Output is correct
55 Correct 4 ms 6992 KB Output is correct
56 Correct 628 ms 703824 KB Output is correct
57 Correct 1409 ms 706232 KB Output is correct
58 Correct 529 ms 129540 KB Output is correct
59 Correct 1332 ms 706012 KB Output is correct
60 Correct 506 ms 254120 KB Output is correct
61 Correct 1178 ms 705956 KB Output is correct
62 Correct 1519 ms 709032 KB Output is correct
63 Correct 1736 ms 709256 KB Output is correct
64 Correct 1592 ms 708916 KB Output is correct
65 Correct 1517 ms 706084 KB Output is correct
66 Correct 1790 ms 707676 KB Output is correct
67 Correct 1688 ms 709288 KB Output is correct
68 Correct 1792 ms 708860 KB Output is correct
69 Correct 5 ms 6992 KB Output is correct
70 Correct 6 ms 7016 KB Output is correct
71 Correct 9 ms 7120 KB Output is correct
72 Correct 6 ms 7092 KB Output is correct
73 Correct 9 ms 7120 KB Output is correct
74 Correct 6 ms 7120 KB Output is correct
75 Correct 8 ms 7128 KB Output is correct
76 Correct 6 ms 6992 KB Output is correct
77 Correct 5 ms 7084 KB Output is correct
78 Correct 6 ms 7040 KB Output is correct
79 Correct 8 ms 7124 KB Output is correct
80 Correct 7 ms 7120 KB Output is correct
81 Correct 8 ms 7068 KB Output is correct
82 Correct 9 ms 7120 KB Output is correct
83 Correct 7 ms 7120 KB Output is correct
84 Correct 5 ms 7120 KB Output is correct
85 Correct 7 ms 7120 KB Output is correct
86 Correct 33 ms 13776 KB Output is correct
87 Correct 31 ms 13776 KB Output is correct
88 Correct 25 ms 13700 KB Output is correct
89 Correct 27 ms 13720 KB Output is correct
90 Correct 29 ms 13776 KB Output is correct
91 Correct 5 ms 7120 KB Output is correct
92 Correct 7 ms 9296 KB Output is correct
93 Correct 35 ms 13780 KB Output is correct
94 Correct 27 ms 13776 KB Output is correct
95 Correct 31 ms 13728 KB Output is correct
96 Correct 27 ms 13720 KB Output is correct
97 Correct 25 ms 13744 KB Output is correct
98 Correct 6 ms 6992 KB Output is correct
99 Correct 645 ms 705792 KB Output is correct
100 Correct 658 ms 705952 KB Output is correct
101 Correct 962 ms 708820 KB Output is correct
102 Correct 672 ms 706196 KB Output is correct
103 Correct 864 ms 707700 KB Output is correct
104 Correct 892 ms 709068 KB Output is correct
105 Correct 4 ms 6992 KB Output is correct
106 Correct 363 ms 412140 KB Output is correct
107 Correct 612 ms 705940 KB Output is correct
108 Correct 794 ms 708904 KB Output is correct
109 Correct 674 ms 706140 KB Output is correct
110 Correct 828 ms 707700 KB Output is correct
111 Correct 849 ms 709172 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 1732 ms 565732 KB Output is correct
4 Execution timed out 4062 ms 708904 KB Time limit exceeded
5 Halted 0 ms 0 KB -