Submission #946402

#TimeUsernameProblemLanguageResultExecution timeMemory
946402amirhoseinfar1385Rainforest Jumps (APIO21_jumps)C++17
21 / 100
1668 ms8376 KiB
#include "jumps.h" #include<bits/stdc++.h> using namespace std; const int maxn=100000+10,lg=20; int inf=1e9; int n,all[maxn],fr[maxn],fl[maxn],sp[lg][maxn],spr[lg][maxn]; void pre(){ //cout<<"slaam1"<<endl; all[0]=all[n+1]=inf; vector<int>v; v.push_back(0); for(int i=1;i<=n;i++){ while((int)v.size()>0&&all[v.back()]<=all[i]){ v.pop_back(); } fl[i]=v.back(); v.push_back(i); } v.clear(); v.push_back(n+1); for(int i=n;i>=1;i--){ while((int)v.size()>0&&all[v.back()]<=all[i]){ v.pop_back(); } fr[i]=v.back(); v.push_back(i); } for(int i=1;i<=n;i++){ spr[0][i]=fr[i]; if(all[fr[i]]>=all[fl[i]]){ sp[0][i]=fr[i]; }else{ sp[0][i]=fl[i]; } } } void init(int N,vector<int> H) { n=N; for(int i=1;i<=n;i++){ all[i]=H[i-1]; } pre(); } int cal(int a,int b,int c,int mx){ if(all[a]>mx){ return inf; } if(a>=b&&a<=c){ return 0; } if(spr[0][a]>=b&&spr[0][a]<=c){ return 1; } if(all[sp[0][a]]<=mx){ return cal(sp[0][a],b,c,mx)+1; } return cal(spr[0][a],b,c,mx)+1; } /*int solve(int a,int b,int c,int d){ int mxb=all[c]; for(int i=c;i<=d;i++){ mxb=max(mxb,all[i]); } int wh=b,mx=all[b]; for(int i=b-1;i>=a;i--){ if(all[i]>=mxb){ break; } if(all[i]>mx){ mx=all[i]; wh=i; } } int res=cal(wh,c,d,mxb); if(res==inf){ res=-1; } return res; }*/ int solve(int a,int b,int c,int d){ int mxb=all[c]; for(int i=c;i<=d;i++){ mxb=max(mxb,all[i]); } int wh=b,mx=all[b]; for(int i=b-1;i>=a;i--){ if(all[i]>=mxb){ break; } if(all[i]>mx){ mx=all[i]; wh=i; } } int res=inf; for(int i=a;i<=b;i++){ res=min(res,cal(i,c,d,mxb)); } if(res==inf){ res=-1; } return res; } int minimum_jumps(int A, int B, int C, int D) { A++; B++; C++; D++; return solve(A,B,C,D); }

Compilation message (stderr)

jumps.cpp: In function 'int solve(int, int, int, int)':
jumps.cpp:90:6: warning: variable 'wh' set but not used [-Wunused-but-set-variable]
   90 |  int wh=b,mx=all[b];
      |      ^~
#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...