#include<bits/stdc++.h>
using namespace std;
vector<int> mp, mp1;
vector<bool> isolated;
void initialize(vector<int> t, vector<int> h) {
mp.resize(h.size()+1, 0);
mp1.resize(h.size()+1, 0);
for (int i = 1; i <= h.size(); i++) {
if (h[i-1] >= t.back())
mp[i] = 1;
if (h[i-1] >= t[0])
mp1[i] = 1;
mp[i] += mp[i-1];
mp1[i] += mp1[i-1];
}
auto propagate = [&](int ind) {
int i = ind;
while (i >= 0 && t[0] > h[i]) {
isolated[i] = false;
i--;
}
i = ind;
while (i < h.size() && t[0] > h[i]) {
isolated[i] = false;
i++;
}
};
isolated.resize(h.size(), true);
for (int i = 0; i < h.size(); i++) {
if (isolated[i] && h[i] < t[1] && t[0] > h[i]) {
propagate(i);
}
}
}
bool can_reach(int l, int r, int s, int d) {
if (d < s)
swap(d, s);
if ((mp[d+1]-mp[s]) > 0)
return false;
if (!(mp1[d+1]-mp1[s]))
return true;
return !(isolated[s] || isolated[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... |