제출 #948429

#제출 시각아이디문제언어결과실행 시간메모리
948429vjudge1밀림 점프 (APIO21_jumps)C++17
33 / 100
4024 ms13920 KiB
#include "jumps.h"
//#include "stub.cpp"

#include <bits/stdc++.h>

#define pb push_back
#define ll long long
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()


using namespace std;
const int N=2e5+5;
vector<int> g[N];
int n;
void init(int n_, vector<int> a){
	n=n_;
	stack<int> A;
	for(int i=0;i<n;i++){
		while(!A.empty() && a[A.top()]<a[i]) A.pop();
		if(!A.empty()) g[i].pb(A.top());
		A.push(i);
	}
	while(!A.empty()) A.pop();
	for(int i=n-1;i>=0;i--){
		while(!A.empty() && a[A.top()]<a[i]) A.pop();
		if(!A.empty()) g[i].pb(A.top());
		A.push(i);
	}
}

int minimum_jumps(int A, int B, int C, int D) {
	queue< pair <int,int> > dq;
	vector<bool> used(n);
	for(int i=A;i<=B;i++){
		dq.push(make_pair(i,0));
	}
	int ans=1e9;
	while(!dq.empty()){
		int x=dq.front().fr;
		int d=dq.front().sc;
		dq.pop();
		if(C<=x && x<=D) ans=min(ans,d);
		for(auto it: g[x]){
			if(!used[it]){
				used[it]=1;
				dq.push(make_pair(it,d+1));
			}
		}
	}
	if(ans==1e9) ans=-1;
	//cout<<ans<<endl;
	return ans;
}
#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...