Submission #948419

#TimeUsernameProblemLanguageResultExecution timeMemory
948419vjudge1Rainforest Jumps (APIO21_jumps)C++17
21 / 100
1175 ms166464 KiB
#include <bits/stdc++.h> #include "jumps.h" //#define int long long #define ff first #define ss second #define pb push_back #define all(x) x.begin(),x.end() using namespace std; const int N=1e5+5; bool sbtsk1=1; int n=2000; int t[2005][8005],d[2005][2005]; void build(int v,int tl,int tr){ if(tl==tr){ for(int i=1;i<=n;i++){ t[i][v]=d[i][tl]; } } else{ int tm=(tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); for(int i=1;i<=n;i++){ t[i][v]=min(t[i][v*2],t[i][v*2+1]); } } } int get(int v,int tl,int tr,int i,int l,int r){ if(r<tl or tr<l)return INT_MAX; if(l<=tl && tr<=r)return t[i][v]; int tm=(tl+tr)/2; return min(get(v*2,tl,tm,i,l,r),get(v*2+1,tm+1,tr,i,l,r)); } void init(int N,vector<int> H) { n=N; stack <int> st; vector <int> l(N+1),r(N+1); for(int i=0;i<N;i++){ if(H[i]!=i+1)sbtsk1=0; } for(int i=0;i<N;i++){ while(!st.empty() && H[st.top()]<H[i]){ r[st.top()+1]=i+1; st.pop(); } st.push(i); } while(!st.empty()){ st.pop(); } for(int i=N-1;i>=0;i--){ while(!st.empty() && H[st.top()]<H[i]){ l[st.top()+1]=i+1; st.pop(); } st.push(i); } queue <int> q; for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ d[i][j]=1e9; } } for(int i=1;i<=N;i++){ q.push(i); d[i][i]=0; while(!q.empty()){ int v=q.front(); q.pop(); if(l[v]!=-1 && d[i][l[v]]==1e9){ d[i][l[v]]=d[i][v]+1; q.push(l[v]); } if(r[v]!=-1 && d[i][r[v]]==1e9){ d[i][r[v]]=d[i][v]+1; q.push(r[v]); } } } build(1,1,N); } int minimum_jumps(int A, int B, int C, int D) { if(sbtsk1)return C-B; A++;B++;C++;D++; int mn=1e9; for(int i=A;i<=B;i++){ mn=min(mn,get(1,1,n,i,C,D)); } if(mn==1e9)mn=-1; return mn; } /*signed main(){ ios_base::sync_with_stdio(); cin.tie(0);cout.tie(0); int n,q; cin>>n>>q; vector <int> a(n); for(int i=0;i<n;i++)cin>>a[i]; init(n,a); for(int i=0;i<q;i++){ int a,b,c,d; cin>>a>>b>>c>>d; cout<<minimum_jumps(a,b,c,d)<<"\n"; } }*/
#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...