#include <iostream>
#include "obstacles.h"
#define fi first
#define se second
#define ll long long
#define pb push_back
using namespace std;
const int N=200005;
int st[4*N];
int t[N],h[N];
int n,MAXT=0;
void build(int x, int xl, int xr){
if(xl==xr){
st[x]=h[xl];
return;
}
int mid=(xl+xr)/2;
build(x*2+1,xl,mid);
build(x*2+2,mid+1,xr);
st[x]=max(st[x*2+1],st[x*2+2]);
return;
}
int f(int x, int xl, int xr, int l, int r){
if(xl>=l && xr<=r) return st[x];
if(xr<l || xl>r) return 0;
int mid=(xl+xr)/2;
return max(f(x*2+1,xl,mid,l,r),f(x*2+2,mid+1,xr,l,r));
}
void initialize(vector<int> T, vector<int> H) {
for(int i=0; i<T.size(); i++){
t[i]=T[i];
MAXT=max(MAXT,t[i]);
}
for(int i=0; i<H.size(); i++) h[i]=H[i];
n=H.size();
build(0,0,n-1);
return;
}
bool can_reach(int L, int R, int S, int D) {
int l=L,r=R,s=S,d=D;
if(s>d) swap(s,d);
if(s==d || s+1==d) return true;
int mah=f(0,0,n-1,s+1,d-1);
if(mah>=MAXT) return false;
return true;
}
/*
3 4
2 1 3
0 1 2 0
1
0 3 1 3
*/