Submission #1138834

#TimeUsernameProblemLanguageResultExecution timeMemory
1138834am_aadvik밀림 점프 (APIO21_jumps)C++17
0 / 100
4019 ms12200 KiB
#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;

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

void init(int n, vector<int> a) {
	for (int i = 0; i < n; ++i) {
		int s = 0, e = i - 1, res = -1;
		while (s <= e) {
			int mid = (s + e) / 2;
			if (a[mid] > a[i]) res = mid, s = mid + 1;
			else e = mid - 1;
		}
		if (res != -1) con(i, res);

		s = i + 1, e = n - 1, res = -1;
		while (s <= e) {
			int mid = (s + e) / 2;
			if (a[mid] > a[i]) res = mid, e = mid - 1;
			else s = mid + 1;
		}
		if (res != -1) con(i, res);
	}
}

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...