#include <bits/stdc++.h>
using namespace std;
const long long maxn = 3e5 + 20, Mod = 1e9 + 7, inf = 1e17;
long long n, q, seg[2][4 * maxn], A[maxn], lazy[2][4 * maxn], tmp, tmp1, tmp2,
    tmp3, F[maxn];
vector<long long> ans;
void shift(long long id) {
  for (long long i = 0; i < 2; i++) {
    seg[i][id * 2] += lazy[i][id];
    seg[i][id * 2 + 1] += lazy[i][id];
    lazy[i][id * 2] += lazy[i][id];
    lazy[i][id * 2 + 1] += lazy[i][id];
    lazy[i][id] = 0;
  }
}
void add(long long s, long long e, long long id, long long l, long long r,
         long long k, long long bin) {
  if (s >= r || e <= l) return;
  if (s >= l && e <= r) {
    seg[bin][id] += k;
    lazy[bin][id] += k;
    return;
  }
  shift(id);
  long long mid = (s + e) / 2;
  add(s, mid, id * 2, l, r, k, bin);
  add(mid, e, id * 2 + 1, l, r, k, bin);
  seg[bin][id] = min(seg[bin][id * 2], seg[bin][id * 2 + 1]);
}
long long get(long long s, long long e, long long id, long long l, long long r,
              long long bin) {
  if (s >= r || e <= l) return inf;
  if (s >= l && e <= r) {
    return seg[bin][id];
  }
  shift(id);
  long long mid = (s + e) / 2;
  return min(get(s, mid, id * 2, l, r, bin),
             get(mid, e, id * 2 + 1, l, r, bin));
}
bool check(long long l, long long r) {
  long long m0 = get(1, n + 1, 1, l, r, 0), m1 = get(1, n + 1, 1, l, r, 1);
  long long fr1 = get(1, n + 1, 1, r - 1, r, (r - 1) % 2);
  long long fl1 = get(1, n + 1, 1, l - 1, l, (l - 1) % 2);
  if (l == 1) fl1 = 0;
  if (!(l % 2)) {
    m0 += fl1;
    m1 -= fl1;
    if (m0 < 1 || m1 < 0) return 0;
  } else {
    m0 -= fl1;
    m1 += fl1;
    if (m0 < 0 || m1 < 1) return 0;
  }
  if ((r - l) % 2) {
    long long tt = fr1 + fl1;
    if (tt != 1) return 0;
  } else {
    long long tt = fr1 - fl1;
    if (tt != 0) return 0;
  }
  return 1;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> A[i];
    F[i] = A[i] - F[i - 1];
    add(1, n + 1, 1, i, i + 1, F[i], i % 2);
    add(1, n + 1, 1, i, i + 1, inf, (i + 1) % 2);
  }
  cin >> q;
  for (long long i = 0; i < q; i++) {
    cin >> tmp;
    if (tmp == 1) {
      cin >> tmp1 >> tmp2 >> tmp3;
      tmp1++;
      tmp2++;
      add(1, n + 1, 1, tmp1, tmp2 + 1, tmp3, tmp1 % 2);
      if ((tmp2 - tmp1 + 1) % 2) {
        add(1, n + 1, 1, tmp2 + 1, n + 1, -tmp3, (tmp2 + 1) % 2);
        add(1, n + 1, 1, tmp2 + 1, n + 1, tmp3, tmp2 % 2);
      }
    } else {
      cin >> tmp1 >> tmp2;
      tmp1++;
      tmp2++;
      ans.push_back(check(tmp1, tmp2 + 1));
    }
  }
  for (long long i = 0; i < ans.size(); i++) {
    cout << ans[i] << endl;
  }
}
