#include "obstacles.h"
#include <bits/stdc++.h>
using namespace std;
class dsu {
public:
vector<int> p;
int n;
dsu() {
}
dsu(int _n) : n(_n) {
p.resize(n);
}
int get(int x) {
if (p[x] == x) {
return x;
}
return (p[x] = get(p[x]));
}
void unite(int x, int y) {
x = get(x);
y = get(y);
if (x != y) {
p[y] = x;
}
return;
}
bool same(int x, int y) {
return (get(x) == get(y));
}
};
vector<int> tt, hh;
int n, m;
dsu ds;
void initialize(vector<int> t, vector<int> h) {
tt = t, hh = h;
n = t.size(), m = h.size();
auto Valid = [&](int x, int y) {
return (0 <= x) && (x < n) && (0 <= y) && (y < m) && (t[x] > h[y]);
};
ds = dsu(n * m);
vector<int> di = {-1, 0, 1, 0}, dj = {0, 1, 0, -1};
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int k = 0; k < 4; k++) {
int new_i = i + di[k], new_j = j + dj[k];
if (Valid(new_i, new_j) && Valid(i, j)) {
ds.unite(m * i + j, m * new_i + new_j);
}
}
}
}
}
bool can_reach(int l, int r, int s, int d) {
return ds.same(s, d);
}