#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |