이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "jumps.h"
using namespace std;
#define pb push_back
#define ll long long
#define ff first
#define ss second
#define PI 3.1415926535897932384626433
#define all(s) s.begin(),s.end()
const int maxn=200000,INF=1e9;
bool ok=true;
vector<int>adj[maxn+5];
int n,dist[maxn+5];
int dfs(int a,int b,int c,int d){
queue<int>q;
fill(dist,dist+n+1,INF);
for(int i=a;i<=b;i++) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
if(c<=x&&x<=d) return dist[x];
for(auto u:adj[x]){
if(dist[u]==INF){
dist[u]=dist[x]+1;
q.push(u);
}
}
}
return -1;
}
void init(int N,vector<int>H){
n=N;
for(int i=0;i<n;i++){
if(H[i]!=i+1) ok=false;
}
stack<pair<int,int>>s;
for(int i=0;i<n;i++){
while(!s.empty()&&s.top().ff<H[i]) s.pop();
if(!s.empty()) adj[i].pb(s.top().ss);
s.push({H[i],i});
}
while(!s.empty()) s.pop();
for(int i=n-1;i>=0;i--){
while(!s.empty()&&s.top().ff<H[i]) s.pop();
if(!s.empty()) adj[i].pb(s.top().ss);
s.push({H[i],i});
}
}
int minimum_jumps(int A, int B, int C, int D){
if(ok==true){
return C-B;
}
return dfs(A,B,C,D);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |