Submission #1322737

#TimeUsernameProblemLanguageResultExecution timeMemory
1322737lucas110550Obstacles for a Llama (IOI25_obstacles)C++20
24 / 100
131 ms8180 KiB
#include <vector> #include <algorithm> #include <iostream> #include <climits> using namespace std; struct SegTree { int n; vector<int> tree; void init(const vector<int>& data) { n = data.size(); tree.assign(2 * n, 0); for (int i = 0; i < n; i++) tree[n + i] = data[i]; for (int i = n - 1; i > 0; i--) tree[i] = max(tree[2 * i], tree[2 * i + 1]); } int query(int l, int r) { int res = -1; for (l += n, r += n; l <= r; l /= 2, r /= 2) { if (l % 2 == 1) res = max(res, tree[l++]); if (r % 2 == 0) res = max(res, tree[r--]); } return res; } }; void initialize(std::vector<int> T, std::vector<int> H); bool can_reach(int L, int R, int S, int D); static int global_max_reachable_T = -1; static SegTree st; void initialize(std::vector<int> T, std::vector<int> H) { int N = T.size(); int M = H.size(); int min_H = 2000000000; for (int h : H) { if (h < min_H) min_H = h; } global_max_reachable_T = -1; for (int i = 0; i < N; i++) { if (T[i] <= min_H) { break; } if (T[i] > global_max_reachable_T) { global_max_reachable_T = T[i]; } } st.init(H); } bool can_reach(int L, int R, int S, int D) { if (S > D) std::swap(S, D); int path_obstacle = st.query(S, D); return global_max_reachable_T > path_obstacle; }
#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...