Submission #981231

#TimeUsernameProblemLanguageResultExecution timeMemory
981231Muhammad_AneeqRainforest Jumps (APIO21_jumps)C++17
0 / 100
4066 ms17024 KiB
#include "jumps.h" #include <vector> #include <set> #include <cmath> #include <iostream> using namespace std; int const N=2e5+10,LG=20; int mx[N][LG]={}; vector<int>a; int get(int l,int r) { int lg=log2(r-l+1); if (a[mx[l][lg]]>=a[mx[r-(1<<lg)+1][lg]]) return mx[l][lg]; return mx[r-(1<<lg)+1][lg]; } void init(int N,vector<int> H) { a=H; for (int i=0;i<N;i++) mx[i][0]=i; for (int i=1;(1<<i)<=N;i++) for (int j=0;j+(1<<(i-1))<N;j++) { if (a[mx[j][i-1]]>=a[mx[j+(1<<(i-1))][i-1]]) mx[j][i]=mx[j][i-1]; else mx[j][i]=mx[j+(1<<(i-1))][i-1]; } } int minimum_jumps(int A, int B, int C, int D) { int minsteps=1e9+10; for (int i=A;i<=B;i++) { int z=get(i,D); if (z>=C&&z<=D) { int st=i,en=z,cnt=0;; while (1) { int f=st; while (st+1<en) { int mid=(st+en)/2; if (get(st,mid)>f) en=mid; else st=mid; } cnt++; if (en>=C&&en<=D) break; st=en; en=z+1; } minsteps=min(cnt,minsteps); } } if (minsteps==1e9+10) return -1; return minsteps; }
#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...