#include <vector>
using namespace std;
static int T0;
static vector<int> H;
static vector<int> blockedPrefix;
void initialize(vector<int> T, vector<int> h) {
T0 = T[0]; // only one row
H = h;
int M = H.size();
blockedPrefix.assign(M, 0);
blockedPrefix[0] = (T0 > H[0] ? 0 : 1);
for (int j = 1; j < M; j++) {
blockedPrefix[j] = blockedPrefix[j - 1] + (T0 > H[j] ? 0 : 1);
}
}
bool can_reach(int L, int R, int S, int D) {
if (S > D) swap(S, D);
// number of blocked cells between S and D inclusive, but we can skip S
int blockedBetween = blockedPrefix[D] - blockedPrefix[S];
return blockedBetween == 0;
}
# | 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... |