/**
* 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 = 3e5 + 9;
int a[N];
struct Node {
int first, last;
bool sorted;
Node() {
first = last = -1;
sorted = true;
}
};
struct SegmentTree {
vector<Node> t;
SegmentTree(int n) {
t.resize(4 * n);
}
inline Node combine (Node a, Node b) {
if(a.first == -1) return b;
if(b.first == -1) return a;
Node n;
n.first = a.first;
n.last = b.last;
n.sorted = (a.sorted && b.sorted && a.last <= b.first);
return n;
}
void build(int n, int b, int e) {
if (b == e) {
t[n].first = a[b];
t[n].last = a[b];
t[n].sorted = true;
return;
}
int mid = (b + e) >> 1, l = n << 1, r = l | 1;
build(l, b, mid);
build(r, mid + 1, e);
t[n] = combine(t[l], t[r]);
}
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].first = x;
t[n].last = x;
t[n].sorted = 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] = combine(t[l], t[r]);
}
Node query(int n, int b, int e, int i, int j) {
if (b > j || e < i) {
Node x;
x.first = -1;
return x;
}
if (b >= i && e <= j) return t[n];
int mid = (b + e) >> 1, l = n << 1, r = l | 1;
return combine(query(l, b, mid, i, j), query(r, mid + 1, e, i, j));
}
};
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];
}
SegmentTree t(n);
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 {
auto oky = t.query(1, 1, n, l, r);
cout << (oky.sorted ? "YES" : "NO") << nl;
}
}
return 0;
}