#include <bits/stdc++.h>
using namespace std;
const int NMAX = 200'000;
int T[NMAX];
int H[NMAX];
// In subtask 2, FOV is prefix sum whether a column contains a FOV cell or not
int FOV[NMAX];
int N, M;
int ST;
void initialize(std::vector<int> lT, std::vector<int> lH) {
copy(lT.begin(), lT.end(), T);
copy(lH.begin(), lH.end(), H);
N = lT.size();
M = lH.size();
if (N == 1) {
ST = 1;
FOV[0] = T[0] > H[0];
for (int i = 1; i < M; ++i) {
FOV[i] = FOV[i-1] + (T[0] > H[i]);
}
// Subtask 2
} else {
ST = 2;
for (int j = 0; j < M; ++j) {
int idx = int(upper_bound(T, T + N, H[j]) - T);
FOV[j] = idx != N;
if (j > 0) {
FOV[j] += FOV[j-1];
}
}
}
}
bool can_reach(int L, int R, int S, int D) {
if (S > D) {swap(S,D);}
if (D <= R && S >= L) {
if (ST == 2) {
if (T[0] <= max(H[S], H[D])) {return false;}
}
int fov_cells = FOV[D] - (S != 0 ? FOV[S-1] : 0);
return (D - S + 1) == (fov_cells);
}
return false;
}
| # | 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... |