Submission #1138845

#TimeUsernameProblemLanguageResultExecution timeMemory
1138845am_aadvikRainforest Jumps (APIO21_jumps)C++20
33 / 100
4097 ms23896 KiB
#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
#include<set>
#include<algorithm>
using namespace std;

vector<int> g[200005];
bool vis[200005]; int n;
void con(int u, int v) {
	g[u].push_back(v);
}

void init(int tn, vector<int> a) {
	n = tn; set<int> s;
	vector<pair<int, int>> sa;
	for (int i = 0; i < n; ++i) sa.push_back({ a[i], i });
	sort(sa.begin(), sa.end());
	for (int i = n - 1; i >= 0; --i) {
		if (!s.empty()) {
			auto it = s.lower_bound(sa[i].second);
			if (it != s.end()) con(sa[i].second, *it);
			if (it != s.begin()) con(sa[i].second, (*prev(it, 1)));
		}
		s.insert(sa[i].second);
	}
}

int minimum_jumps(int a, int b, int c, int d) {
	queue<pair<int, int>> q;
	memset(vis, 0, sizeof(vis));
	for (int i = a; i <= b; ++i)
		q.push({ i, 0 }), vis[i] = 1;

	while (!q.empty()) {
		auto f = q.front(); q.pop();
		if ((f.first >= c) && (f.first <= d)) return f.second;
		for (auto x : g[f.first])
			if (!vis[x]) q.push({ x, f.second + 1 }), vis[x] = 1;
	}
	return -1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...