Submission #489069

# Submission time Handle Problem Language Result Execution time Memory
489069 2021-11-21T06:58:39 Z cfalas Rainforest Jumps (APIO21_jumps) C++14
27 / 100
1269 ms 76368 KB
#include "jumps.h"
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define INF 10000000
#define MOD 1000000007
#define MID ((l+r)/2)
#define HASHMOD 2305843009213693951
#define ll long long
#define ull unsigned long long
#define F first
#define S second
typedef pair<ll, ll> ii;
typedef pair<ii, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef map<int, int> mii;

#define EPS 1e-6
#define FOR(i,n) for(int i=0;i<((int)(n));i++)
#define FORi(i,a,b) for(int i=((int)(a));i<((int)(b));i++)
#define FOA(v, a) for(auto v : a)

int t, n;
vi a, b;

vi nl, pl;

struct nodemax{
	nodemax* L=NULL, *R=NULL;
	int val=-1;

	void update(int x, int v, int l=0, int r=n-1){
		if(l==r && l==x){
			val = v;
			//cout<<l<<" "<<r<<" "<<val<<endl;
		}
		else if(l==r || l>x || r<x) return;
		else{
			if(!L) L = new nodemax();
			if(!R) R = new nodemax();
			val = -1;
			L->update(x, v, l, MID), val = max(val, L->val);
			R->update(x,v, MID+1,r), val = max(val, R->val);
			//cout<<l<<" "<<r<<" "<<val<<endl;
		}
	}

	int query(int rl, int rr, int l=0, int r=n-1){
		if(rl<=l && r<=rr) return val;
		else if(rl>r || l>rr) return -1;
		else {
			if(!L) L = new nodemax();
			if(!R) R = new nodemax();
			return max(L->query(rl, rr, l, MID), R->query(rl,rr,MID+1,r));
		}
	}
};
struct node{
	node* L=NULL, *R=NULL;
	int val=n;

	void update(int x, int v, int l=0, int r=n-1){
		if(l==r && l==x){
			val = v;
			//cout<<l<<" "<<r<<" "<<val<<endl;
		}
		else if(l==r || l>x || r<x) return;
		else{
			if(!L) L = new node();
			if(!R) R = new node();
			val = n;
			L->update(x, v, l, MID), val = min(val, L->val);
			R->update(x,v, MID+1,r), val = min(val, R->val);
			//cout<<l<<" "<<r<<" "<<val<<endl;
		}
	}

	int query(int rl, int rr, int l=0, int r=n-1){
		if(rl<=l && r<=rr) return val;
		else if(rl>r || l>rr) return n;
		else {
			if(!L) L = new node();
			if(!R) R = new node();
			return min(L->query(rl, rr, l, MID), R->query(rl,rr,MID+1,r));
		}
	}
};

node seg;
nodemax segm;
int hi[201000][20];
int lo[201000][20];
int le[201000][20];
void init(int N, std::vector<int> H) {
	n = N;
	a.resize(n);
	nl.resize(n+1);
	pl.resize(n);
	FOR(i,n) a[i] = H[i];
	
	FORi(i,1,n+1){
		//cout<<endl;
		nl[n-i] = seg.query(a[n-i], n-1);
		seg.update(a[n-i]-1, n-i);
	}
	nl[n] = n;
	FOR(i,n){
		//cout<<endl;
		pl[i] = segm.query(a[i], n-1);
		segm.update(a[i]-1, i);
	}
	FOR(i,n){
		if(nl[i]!=n && (pl[i]==-1 || a[nl[i]]>a[pl[i]])) hi[i][0] = nl[i];
		else hi[i][0] = pl[i];
		if(nl[i]!=n && (pl[i]==-1 || a[nl[i]]<a[pl[i]])) lo[i][0] = nl[i];
		else lo[i][0] = pl[i];
		if(hi[i][0] == -1) hi[i][0] = n;
		if(lo[i][0] == -1) lo[i][0] = n;
		le[i][0] = pl[i];
		if(le[i][0] == -1) le[i][0] = n;
	}
	lo[n][0] = n;
	hi[n][0] = n;
	le[n][0] = n;

	//FOR(i,n) cout<<hi[i][0]<<" "; cout<<" | "; FOR(i,n) cout<<lo[i][0]<<" "; cout<<endl;
	FORi(j,1,20){
		FOR(i,n+1){
			hi[i][j] = hi[hi[i][j-1]][j-1];
			lo[i][j] = lo[lo[i][j-1]][j-1];
			le[i][j] = le[le[i][j-1]][j-1];
			//cout<<hi[i][j]<<" ";
		}
		//cout<<endl;
	}
	//cout<<endl;
}

int minimum_jumps(int A, int B, int C, int D) {
	int s = B;
	int ans=0;
	for(int i=18;i>=0;i--){
		if(le[s][i]>=A && le[s][i]<=B) s = le[s][i];
		//cout<<s<<" ";
	}
	//cout<<endl;
	for(int i=18;i>=0;i--){
		if(hi[s][i]!=n && a[hi[s][i]]<=a[C]) s = hi[s][i], ans+=(1<<i);
		//cout<<s<<" ";
	}
	//cout<<endl;
	//cout<<s<<" "<<ans<<endl;
	for(int i=18;i>=0;i--){
		if(lo[s][i]!=n && a[lo[s][i]]<=a[C]) s = lo[s][i], ans+=(1<<i);
		//cout<<s<<" ";
	}
	//cout<<endl;
	//cout<<s<<" "<<ans<<endl;
	if(s>=C && s<=D) return ans;
	if(lo[s][0]>=C && lo[s][0]<=D) return ans+1;
	else return -1;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 276 ms 60740 KB Output is correct
4 Correct 1124 ms 76184 KB Output is correct
5 Correct 970 ms 38464 KB Output is correct
6 Correct 1264 ms 76196 KB Output is correct
7 Correct 983 ms 52172 KB Output is correct
8 Correct 1245 ms 76248 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 0 ms 200 KB Output is correct
5 Incorrect 2 ms 200 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 0 ms 200 KB Output is correct
5 Incorrect 2 ms 200 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 0 ms 200 KB Output is correct
5 Incorrect 259 ms 61400 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 1 ms 200 KB Output is correct
4 Correct 302 ms 34972 KB Output is correct
5 Correct 917 ms 76368 KB Output is correct
6 Correct 618 ms 12752 KB Output is correct
7 Correct 1145 ms 76224 KB Output is correct
8 Correct 625 ms 26432 KB Output is correct
9 Correct 1145 ms 76220 KB Output is correct
10 Correct 1158 ms 76212 KB Output is correct
11 Correct 1216 ms 76308 KB Output is correct
12 Correct 1159 ms 76180 KB Output is correct
13 Correct 1035 ms 76148 KB Output is correct
14 Correct 1269 ms 76192 KB Output is correct
15 Correct 896 ms 76216 KB Output is correct
16 Correct 1087 ms 76188 KB Output is correct
17 Correct 0 ms 200 KB Output is correct
18 Correct 0 ms 200 KB Output is correct
19 Correct 2 ms 200 KB Output is correct
20 Correct 2 ms 328 KB Output is correct
21 Correct 3 ms 328 KB Output is correct
22 Correct 2 ms 328 KB Output is correct
23 Correct 3 ms 328 KB Output is correct
24 Correct 2 ms 328 KB Output is correct
25 Correct 0 ms 328 KB Output is correct
26 Correct 2 ms 584 KB Output is correct
27 Correct 21 ms 968 KB Output is correct
28 Correct 17 ms 968 KB Output is correct
29 Correct 22 ms 968 KB Output is correct
30 Correct 19 ms 968 KB Output is correct
31 Correct 19 ms 968 KB Output is correct
32 Correct 0 ms 200 KB Output is correct
33 Correct 187 ms 44536 KB Output is correct
34 Correct 317 ms 76228 KB Output is correct
35 Correct 224 ms 76188 KB Output is correct
36 Correct 290 ms 76196 KB Output is correct
37 Correct 247 ms 76236 KB Output is correct
38 Correct 227 ms 76232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 1 ms 200 KB Output is correct
4 Correct 302 ms 34972 KB Output is correct
5 Correct 917 ms 76368 KB Output is correct
6 Correct 618 ms 12752 KB Output is correct
7 Correct 1145 ms 76224 KB Output is correct
8 Correct 625 ms 26432 KB Output is correct
9 Correct 1145 ms 76220 KB Output is correct
10 Correct 1158 ms 76212 KB Output is correct
11 Correct 1216 ms 76308 KB Output is correct
12 Correct 1159 ms 76180 KB Output is correct
13 Correct 1035 ms 76148 KB Output is correct
14 Correct 1269 ms 76192 KB Output is correct
15 Correct 896 ms 76216 KB Output is correct
16 Correct 1087 ms 76188 KB Output is correct
17 Correct 0 ms 200 KB Output is correct
18 Correct 0 ms 200 KB Output is correct
19 Correct 2 ms 200 KB Output is correct
20 Correct 2 ms 328 KB Output is correct
21 Correct 3 ms 328 KB Output is correct
22 Correct 2 ms 328 KB Output is correct
23 Correct 3 ms 328 KB Output is correct
24 Correct 2 ms 328 KB Output is correct
25 Correct 0 ms 328 KB Output is correct
26 Correct 2 ms 584 KB Output is correct
27 Correct 21 ms 968 KB Output is correct
28 Correct 17 ms 968 KB Output is correct
29 Correct 22 ms 968 KB Output is correct
30 Correct 19 ms 968 KB Output is correct
31 Correct 19 ms 968 KB Output is correct
32 Correct 0 ms 200 KB Output is correct
33 Correct 187 ms 44536 KB Output is correct
34 Correct 317 ms 76228 KB Output is correct
35 Correct 224 ms 76188 KB Output is correct
36 Correct 290 ms 76196 KB Output is correct
37 Correct 247 ms 76236 KB Output is correct
38 Correct 227 ms 76232 KB Output is correct
39 Correct 0 ms 200 KB Output is correct
40 Correct 0 ms 200 KB Output is correct
41 Correct 0 ms 200 KB Output is correct
42 Correct 342 ms 34900 KB Output is correct
43 Correct 1198 ms 76152 KB Output is correct
44 Correct 585 ms 12748 KB Output is correct
45 Correct 1222 ms 76356 KB Output is correct
46 Correct 685 ms 26432 KB Output is correct
47 Correct 1069 ms 76224 KB Output is correct
48 Correct 1147 ms 76324 KB Output is correct
49 Correct 1167 ms 76188 KB Output is correct
50 Correct 1211 ms 76128 KB Output is correct
51 Correct 1174 ms 76216 KB Output is correct
52 Correct 1138 ms 76352 KB Output is correct
53 Correct 1020 ms 76224 KB Output is correct
54 Correct 1107 ms 76224 KB Output is correct
55 Correct 0 ms 200 KB Output is correct
56 Incorrect 388 ms 75832 KB Output isn't correct
57 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 276 ms 60740 KB Output is correct
4 Correct 1124 ms 76184 KB Output is correct
5 Correct 970 ms 38464 KB Output is correct
6 Correct 1264 ms 76196 KB Output is correct
7 Correct 983 ms 52172 KB Output is correct
8 Correct 1245 ms 76248 KB Output is correct
9 Correct 0 ms 200 KB Output is correct
10 Correct 0 ms 200 KB Output is correct
11 Correct 0 ms 200 KB Output is correct
12 Correct 0 ms 200 KB Output is correct
13 Incorrect 2 ms 200 KB Output isn't correct
14 Halted 0 ms 0 KB -