/**
* written by Binoy Barman .
**/
#include<bits/stdc++.h>
using namespace std;
#define nl '\n'
#define all(v) v.begin(), v.end()
#define Too_Many_Jobs int tts, tc = 1; cin >> tts; hell: while(tts--)
#define Dark_Lord_Binoy ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifdef LOCAL
#include "unravel.hpp"
#else
#define dbg(...) 42
#endif
#define int long long
const int N = 2e5 + 9;
struct node {
int l;
int r;
bool ok;
};
int a[N];
struct SegmentTree {
node t[4 * N];
static const int inf = 1e9;
SegmentTree() {
memset(t, 0, sizeof t);
}
void build(int n, int b, int e) {
if (b == e) {
t[n].l = a[b];
t[n].r = a[b];
t[n].ok = true;
return;
}
int mid = (b + e) >> 1, l = n << 1, r = l | 1;
build(l, b, mid);
build(r, mid + 1, e);
t[n].l = t[l].l;
t[n].r = t[r].r;
if(t[l].ok && t[r].ok && t[l].r <= t[r].l) t[n].ok = true;
else t[n].ok = false;
}
void upd(int n, int b, int e, int i, int x) {
if (b > i || e < i) return;
if (b == e && b == i) {
t[n].l = x;
t[n].r = x;
t[n].ok = true;
return;
}
int mid = (b + e) >> 1, l = n << 1, r = l | 1;
upd(l, b, mid, i, x);
upd(r, mid + 1, e, i, x);
t[n].l = t[l].l;
t[n].r = t[r].r;
if(t[l].ok && t[r].ok && t[l].r <= t[r].l) t[n].ok = true;
else t[n].ok = false;
}
bool query(int n, int b, int e, int i, int j) {
if (b > j || e < i) return true; // return approriate value
if (b >= i && e <= j) return t[n].ok;
int mid = (b + e) >> 1, l = n << 1, r = l | 1;
bool L = query(l, b, mid, i, j);
bool R = query(r, mid + 1, e, i, j);
return (L & R);
}
}t;
int32_t main() {
Dark_Lord_Binoy
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int n, q;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
t.build(1, 1, n);
cin >> q;
while(q--) {
int c, l, r;
cin >> c >> l >> r;
if(c == 1) {
t.upd(1, 1, n, l, r);
}
else {
cout << (t.query(1, 1, n, l, r) ? "YES" : "NO") << nl;
}
}
return 0;
}