#include <bits/stdc++.h>
using namespace std;
const int LIM = 1e5 + 5, MOD = 1e9 + 7;
long long a[500005];
long long N = 500009;
long long seg[20000009];
long long n;
long long gcd(long long a, long long b) {
  if (a > b) swap(a, b);
  if (a == 0) return b;
  return gcd(b % a, a);
}
void create_tree(long long index, long long l, long long r) {
  if (l == r) {
    seg[index] = a[l];
    return;
  }
  long long mid = (l + r) / 2;
  create_tree(2 * index + 1, l, mid);
  create_tree(2 * index + 2, mid + 1, r);
  seg[index] = gcd(seg[2 * index + 1], seg[2 * index + 2]);
  return;
}
long long query(long long index, long long l, long long r, long long ql,
                long long qr, long long x) {
  long long xl, xr;
  if ((l > qr) || (r < ql)) return 0;
  if (((l >= ql) && (qr >= r)) && (seg[index] % x == 0)) {
    return 0;
  }
  if (l == r) return 1;
  long long mid = (l + r) / 2;
  long long cnt = query(2 * index + 1, l, mid, ql, qr, x);
  if (cnt > 1) return cnt;
  cnt += query(2 * index + 2, mid + 1, r, ql, qr, x);
  return cnt;
}
void update(long long index, long long l, long long r, long long i,
            long long x) {
  if ((l > i) || (r < i))
    return;
  else if ((l == r) && (l == i)) {
    seg[index] = x;
    return;
  } else {
    long long mid = (l + r) / 2;
    update(2 * index + 1, l, mid, i, x);
    update(2 * index + 2, mid + 1, r, i, x);
    seg[index] = gcd(seg[2 * index + 1], seg[2 * index + 2]);
    return;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long i, j, k, m, g, cnt;
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> a[i];
  create_tree(0, 0, n - 1);
  long long q;
  cin >> q;
  long long qs;
  long long l, r, x, y;
  for (int j = 0; j < q; ++j) {
    cin >> qs;
    if (qs == 1) {
      cin >> l >> r >> x;
      cnt = 0;
      cnt = query(0, 0, n - 1, l - 1, r - 1, x);
      if (cnt <= 1)
        cout << "YES\n";
      else
        cout << "NO\n";
    } else {
      cin >> i >> y;
      update(0, 0, n - 1, i - 1, y);
    }
  }
  return 0;
}
