Submission #750604

#TimeUsernameProblemLanguageResultExecution timeMemory
750604snpmrnhlolRainforest Jumps (APIO21_jumps)C++17
48 / 100
1313 ms50504 KiB
#include "jumps.h" #include <bits/stdc++.h> using namespace std; const int N = 2e5; const int K = 20; int v[N + 2]; int l[N + 2][K]; int r[N + 2][K]; int p[N + 2][K]; stack <int> stk; int en; void init(int n, std::vector<int> H) { int i,j;en = n; for(i = 1;i <= n;i++){ v[i] = H[i - 1]; } r[n + 1][0] = n + 1; l[0][0] = 0; for(i = 1;i <= n;i++){ while(!stk.empty() && v[stk.top()] < v[i]){ r[stk.top()][0] = i;stk.pop(); } stk.push(i); } while(!stk.empty()){ r[stk.top()][0] = n + 1; stk.pop(); } for(i = n;i >= 1;i--){ while(!stk.empty() && v[stk.top()] < v[i]){ l[stk.top()][0] = i;stk.pop(); } stk.push(i); } while(!stk.empty()){ l[stk.top()][0] = 0; stk.pop(); } v[0] = v[n + 1] = -2e9; for(i = 0;i <= n + 1;i++){ if(v[l[i][0]] > v[r[i][0]]){ p[i][0] = l[i][0]; }else p[i][0] = r[i][0]; } for(j = 1;j <= 19;j++){ for(i = 0;i <= n + 1;i++){ if(i > 0 && i < n + 1)p[i][j] = p[p[i][j - 1]][j - 1]; l[i][j] = l[l[i][j - 1]][j - 1]; r[i][j] = r[r[i][j - 1]][j - 1]; } } /*for(j = 0;j <= 19;j++){ for(i = 0;i <= n + 1;i++){ cout<<p[i][j]<<' '<<r[i][j]<<' '<<l[i][j]<<'\n'; } }*/ } int minimum_jumps(int a, int b, int c, int d){ a++;b++;c++;d++; int x = b,i,r2 = 0; int n = en; for(i = 19;i >= 0;i--){ if(l[x][i] >= a && r[l[x][i]][0] <= d){ x = l[x][i]; } } //cout<<x<<'\n'; for(i = 19;i >= 0;i--){ if(1 <= p[x][i] && p[x][i] <= n && p[x][i] < c && r[p[x][i]][0] <= d){ r2+=(1<<i); x = p[x][i]; } } //cout<<x<<'\n'; for(i = 19;i >= 0;i--){ if(r[x][i] < c){ x = r[x][i]; r2+=(1<<i); } } //cout<<x<<'\n'; if(x < c){ x = r[x][0]; r2++; } //cout<<x<<'\n'; if(c <= x && x <= d)return r2; return -1; } /** 7 3 3 2 1 6 4 5 7 4 4 6 6 1 3 5 6 0 1 2 2 **/
#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...