제출 #1223569

#제출 시각아이디문제언어결과실행 시간메모리
1223569Jer밀림 점프 (APIO21_jumps)C++20
0 / 100
4046 ms12328 KiB
#include "jumps.h"
#include <bits/stdc++.h>
#include <vector>

using namespace std;

const int MAXN = 200005;
pair<int, int> con[MAXN];
int n;

void init(int N, std::vector<int> H) {
	n = N;

	for (int i = 0; i < n; i++)
		con[i] = {-1, -1};

	stack<int> s; // H, ind

	for (int i = 0; i < n; i++){
		while (!s.empty() and H[i] > H[s.top()])
			con[s.top()].second = i, s.pop();

		if (!s.empty() and H[s.top()] > H[i])
			con[i].first = s.top();
		
		s.push(i);
	}
}

int minimum_jumps(int A, int B, int C, int D) {
	set<int> vis;
	queue<int> q;

	for (int s = A; s <= B; s++)
		q.push(s);

	int l = 0, curr, len;

	while (!q.empty())
	{
		len = q.size();
		for (int z = len; z > 0; z--){
			curr = q.front(), q.pop();

			if (vis.find(curr) != vis.end())
				continue;

			vis.insert(curr);

			if (curr >= C and curr <= D)
				return l;

			if (con[curr].first != -1 and curr <= A)
				q.push(con[curr].first);

			if (con[curr].second != -1)
				q.push(con[curr].second);
		}
		l++;
	}

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