#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5 + 5;
int st[8 * maxn], lazy[8 * maxn], n;
void applymx(int id, int val){
st[id] = max(st[id], val);
lazy[id] = max(lazy[id], val);
}
void updatemx(int id, int l, int r, int u, int v, int val){
if(v < l || r < u) return;
if(u <= l && r <= v) applymx(id, val);
else{
int mid = (l + r) / 2;
applymx(id * 2, lazy[id]);
applymx(id * 2 + 1, lazy[id]);
updatemx(id * 2, l, mid, u, v, val);
updatemx(id * 2 + 1, mid + 1, r, u, v, val);
st[id] = max(st[id * 2], st[id * 2 + 1]);
}
}
int getmx(int id, int l, int r, int u, int v){
if(v < l || r < u) return 0;
if(u <= l && r <= v) return st[id];
else{
applymx(id * 2, lazy[id]);
applymx(id * 2 + 1, lazy[id]);
int mid = (l + r) / 2;
return max(getmx(id * 2, l, mid, u, v), getmx(id * 2 + 1, mid + 1, r, u, v));
}
}
void applymn(int id, int val){
st[id] = min(st[id], val);
lazy[id] = min(lazy[id], val);
}
void updatemn(int id, int l, int r, int u, int v, int val){
if(v < l || r < u) return;
if(u <= l && r <= v) applymn(id, val);
else{
int mid = (l + r) / 2;
applymn(id * 2, lazy[id]);
applymn(id * 2 + 1, lazy[id]);
updatemn(id * 2, l, mid, u, v, val);
updatemn(id * 2 + 1, mid + 1, r, u, v, val);
st[id] = min(st[id * 2], st[id * 2 + 1]);
}
}
int getmn(int id, int l, int r, int u, int v){
if(v < l || r < u) return n + 1;
if(u <= l && r <= v) return st[id];
else{
applymn(id * 2, lazy[id]);
applymn(id * 2 + 1, lazy[id]);
int mid = (l + r) / 2;
return min(getmn(id * 2, l, mid, u, v), getmn(id * 2 + 1, mid + 1, r, u, v));
}
}
int bit[maxn];
int get(int p){
int res = 0;
for(; p; p -= p & -p) res += bit[p];
return res;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
vector<int> a(n + 1), b(n + 1), l(n + 1), r(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++) cin >> b[i];
for(int i = 1; i <= n; i++){
l[i] = getmx(1, 1, 2 * n, b[i], a[i]);
updatemx(1, 1, 2 * n, b[i], a[i], i);
}
for(int i = 0; i < 4 * maxn; i++) st[i] = lazy[i] = n + 1;
vector<vector<pair<int, int>>> at(n + 1);
vector<vector<int>> th(n + 1);
for(int i = n; i >= 1; i--){
r[i] = getmn(1, 1, 2 * n, b[i], a[i]);
updatemn(1, 1, 2 * n, b[i], a[i], i);
th[l[i]].push_back(i);
}
int q; cin >> q;
for(int i = 1; i <= q; i++){
int ll, rr; cin >> ll >> rr;
at[ll].push_back({rr, i});
}
vector<int> ts(4 * n + 5, 0);
function<void(int, int, int, int, int)> update = [&](int id, int l, int r, int pos, int val){
if(l == r) ts[id] = val;
else{
int mid = (l + r) / 2;
if(pos <= mid) update(id * 2, l, mid, pos, val);
else update(id * 2 + 1, mid + 1, r, pos, val);
ts[id] = max(ts[id * 2], ts[id * 2 + 1]);
}
};
function<int(int, int, int, int, int)> get = [&](int id, int l, int r, int u, int v) -> int {
if(v < l || r < u) return 0;
if(u <= l && r <= v) return ts[id];
int mid = (l + r) / 2;
return max(get(id * 2, l, mid, u, v), get(id * 2 + 1, mid + 1, r, u, v));
};
for(int i = 1; i <= n; i++) update(1, 1, n, i, r[i]);
vector<int> res(q + 1);
for(int i = n; i >= 1; i--){
for(int x: th[i]) update(1, 1, n, x, 0);
for(auto [j, id] : at[i]) res[id] = (get(1, 1, n, i, j) > j);
}
for(int i = 1; i <= q; i++) cout << (res[i] ? "No" : "Yes") << "\n";
}