Submission #1314383

#TimeUsernameProblemLanguageResultExecution timeMemory
1314383CyanberryObstacles for a Llama (IOI25_obstacles)C++20
10 / 100
2095 ms19120 KiB
#include "obstacles.h" #include <bits/stdc++.h> using namespace std; set<int> walls; vector<int> T, H; vector<pair<int, int>> mem; void initialize(std::vector<int> temp, std::vector<int> hum) { mem.assign(hum.size(), {-1, -1}); int maxT = 0; T = temp, H = hum; for (int i = 0; i < T.size(); ++i) { maxT = max(maxT, T[i]); } for (int i = 0; i < H.size(); ++i) { if (H[i] >= maxT) { walls.insert(i); } } } pair<int, int> down(int a) { if (mem[a].first != -1) return mem[a]; int l = a, r = a, req = H[a]; for (int i = 0; i < T.size(); ++i) { while(l >= 0 && T[i] > H[l]) { --l; req = min(req, H[l]); if (i == 0 && mem[l].first != -1) { mem[a] = mem[l]; return mem[l]; } } while(r < H.size() && T[i] > H[r]) { ++r; req = min(req, H[r]); if (i == 0 && mem[r].first != -1) { mem[a] = mem[r]; return mem[r]; } } if (T[i] <= req) { return {l, r}; } } mem[a] = {l, r}; return {l, r}; } bool can_reach(int L, int R, int S, int D) { return down(S) == down(D); }
#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...