#include <bits/stdc++.h>
using namespace std;
long long tag[800010][2], mn[800010][2], v[200010];
inline void pushnow(int p, long long v, int b) {
  tag[p][b] += v;
  mn[p][b] += v;
}
inline void pushdown(int p, int l, int r, int b) {
  if (l == r) return;
  if (tag[p][0]) {
    pushnow((p << 1), tag[p][0], 0);
    pushnow(((p << 1) | 1), tag[p][0], b);
    tag[p][0] = 0;
  }
  if (tag[p][1]) {
    pushnow((p << 1), tag[p][1], 1);
    pushnow(((p << 1) | 1), tag[p][1], b ^ 1);
    tag[p][1] = 0;
  }
}
inline void pushup(int p, int b) {
  mn[p][0] = min(mn[(p << 1)][0], mn[((p << 1) | 1)][b]);
  mn[p][1] = min(mn[(p << 1)][1], mn[((p << 1) | 1)][b ^ 1]);
}
inline void build(int p, int l, int r) {
  if (l == r) {
    mn[p][0] = v[l];
    mn[p][1] = 0x3f3f3f3f3f3f3f3f;
    return;
  }
  int mid = (l + r) >> 1;
  build((p << 1), l, mid);
  build(((p << 1) | 1), mid + 1, r);
  pushup(p, (mid - l + 1) & 1);
}
inline void modify(int p, int l, int r, int ml, int mr, long long v, int b) {
  if (ml > mr) return;
  int mid = (l + r) >> 1;
  pushdown(p, l, r, (mid - l + 1) & 1);
  if (ml <= l && r <= mr) {
    pushnow(p, v, b);
    return;
  }
  if (ml <= mid) modify((p << 1), l, mid, ml, mr, v, b);
  if (mr > mid)
    modify(((p << 1) | 1), mid + 1, r, ml, mr, v, b ^ ((mid - l + 1) & 1));
  pushup(p, (mid - l + 1) & 1);
}
inline long long query(int p, int l, int r, int ql, int qr, int b) {
  if (ql > qr) return 0x3f3f3f3f3f3f3f3f;
  int mid = (l + r) >> 1;
  if (ql <= l && r <= qr) return mn[p][b];
  pushdown(p, l, r, (mid - l + 1) & 1);
  long long ret = 0x3f3f3f3f3f3f3f3f;
  if (ql <= mid) ret = query((p << 1), l, mid, ql, qr, b);
  if (qr > mid)
    ret = min(ret, query(((p << 1) | 1), mid + 1, r, ql, qr,
                         b ^ ((mid - l + 1) & 1)));
  return ret;
}
int n, a[200010], q;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  v[0] = a[0];
  for (int i = 1; i < n; i++) v[i] = a[i] - v[i - 1];
  build(1, 0, n - 1);
  scanf("%d", &q);
  while (q--) {
    int opt, l, r, k;
    scanf("%d%d%d", &opt, &l, &r);
    if (opt == 1) {
      scanf("%d", &k);
      modify(1, 0, n - 1, l, r, k, l & 1);
      if ((r - l + 1) & 1)
        modify(1, 0, n - 1, r + 1, n - 1, -k, (r + 1) & 1),
            modify(1, 0, n - 1, r + 2, n - 1, k, (r & 1));
    } else {
      long long x;
      if (l > 0)
        x = query(1, 0, n - 1, l - 1, l - 1, (l - 1) & 1);
      else
        x = 0;
      long long y = query(1, 0, n - 1, r, r, r & 1);
      if ((r - l + 1) & 1)
        y += x;
      else
        y -= x;
      if (y != ((r - l + 1) & 1) || query(1, 0, n - 1, l, r, l & 1) + x < 1 ||
          query(1, 0, n - 1, l, r, (l & 1) ^ 1) - x < 0)
        puts("0");
      else
        puts("1");
    }
  }
  return 0;
}
