Submission #1314384

#TimeUsernameProblemLanguageResultExecution timeMemory
1314384CyanberryObstacles for a Llama (IOI25_obstacles)C++20
44 / 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(), {-2, -2}); 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 != -2) return mem[a]; int l = a-1, r = a+1, req = H[a]; for (int i = 0; i < T.size(); ++i) { while(l >= 0 && T[i] > H[l]) { req = min(req, H[l]); if (i == 0 && mem[l].first != -2) { mem[a] = mem[l]; return mem[l]; } --l; } while(r < H.size() && T[i] > H[r]) { req = min(req, H[r]); if (i == 0 && mem[r].first != -2) { mem[a] = mem[r]; return mem[r]; } ++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...