Submission #1052177

#TimeUsernameProblemLanguageResultExecution timeMemory
1052177Szymon_PilipczukRainforest Jumps (APIO21_jumps)C++17
0 / 100
4038 ms3736 KiB
#include "jumps.h" #include <algorithm> #include <vector> using namespace std; int a[200000]; int dest[200000]; int dest2[200000]; int t1 = 1; void init(int N, std::vector<int> H) { for(int i = 0;i<N;i++) { if (i+1 != H[i]) { t1 = 0; } a[i] = H[i]; dest[i] = 300000; dest2[i] = 300000; for (int j = i;j>=0;j--) { if (H[j] > H[i]) { dest[i] = j; break; } } for(int j = i; j<N;j++) { if (H[j]>H[i]) { dest2[i] = j; break; } } } } int minimum_jumps(int A, int B, int C, int D) { if (t1 == 1) { return C-B; } else { int answer = 300000; for(int i = A;i<=B;i++) { for(int j = C;j<=D;j++) { int cu_i = i; int steps = 0; while(a[cu_i]<a[j]) { if(a[dest2[cu_i]]>a[j]) { break; } if (a[dest[cu_i]]>a[j]) { cu_i = dest2[cu_i]; } else { if (a[dest2[cu_i]]>a[dest[cu_i]]) { cu_i = dest2[cu_i]; } else { cu_i = dest[cu_i]; } } steps++; if (cu_i == j) { answer = min(answer,steps); } } } } if (answer > 200000) { return -1; } return answer; } }
#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...