Submission #711633

#TimeUsernameProblemLanguageResultExecution timeMemory
711633irmuunRainforest Jumps (APIO21_jumps)C++17
37 / 100
4030 ms14460 KiB
#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), dist[i]=0;
    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 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...