#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000007;
const int N = 800050;
struct node {
  long long siz, evmn, odmn, r, tag;
  node() { siz = r = tag = 0, evmn = odmn = inf; }
  node(long long siz, long long ev, long long od, long long r, long long tag)
      : siz(siz), evmn(ev), odmn(od), r(r), tag(tag) {}
  void operator+=(long long k) {
    if (siz & 1) r += k;
    tag += k, evmn += k;
  }
  void print() {
    cout << siz << ' ' << evmn << ' ' << odmn << ' ' << r << ' ' << tag << endl;
  }
} t[N], ans;
node operator+(node a, node b) {
  node c(a.siz + b.siz, 0, 0, 0, 0);
  if (a.siz & 1) {
    c.evmn = min(a.evmn, b.odmn + a.r);
    c.odmn = min(a.odmn, b.evmn - a.r);
    c.r = b.r + ((b.siz & 1) ? -1 : 1) * a.r;
  } else {
    c.evmn = min(a.evmn, b.evmn - a.r);
    c.odmn = min(a.odmn, b.odmn + a.r);
    c.r = b.r + ((b.siz & 1) ? -1 : 1) * a.r;
  }
  return c;
}
int n, q;
inline void push_up(int x) { t[x] = t[x << 1] + t[x << 1 | 1]; }
inline void push_down(int x) {
  if (t[x].tag) {
    t[x << 1] += t[x].tag;
    t[x << 1 | 1] += t[x].tag;
    t[x].tag = 0;
  }
}
void build(int x, int l, int r) {
  if (l == r) {
    t[x].siz = 1, cin >> t[x].evmn;
    --t[x].evmn, t[x].r = t[x].evmn;
    t[x].tag = 0;
  } else {
    int mid = (l + r) >> 1;
    build(x << 1, l, mid);
    build(x << 1 | 1, mid + 1, r);
    push_up(x);
  }
}
void add(int x, int l, int r, int L, int R, int v) {
  if (L <= l && r <= R) {
    t[x] += v;
  } else {
    int mid = (l + r) >> 1;
    push_down(x);
    if (L <= mid) add(x << 1, l, mid, L, R, v);
    if (R > mid) add(x << 1 | 1, mid + 1, r, L, R, v);
    push_up(x);
  }
}
void query(int x, int l, int r, int L, int R) {
  if (L <= l && r <= R) {
    ans = ans + t[x];
  } else {
    int mid = (l + r) >> 1;
    push_down(x);
    if (L <= mid) query(x << 1, l, mid, L, R);
    if (R > mid) query(x << 1 | 1, mid + 1, r, L, R);
  }
}
int main() {
  ios ::sync_with_stdio(false);
  cin >> n;
  build(1, 1, n);
  int type, a, b, k;
  cin >> q;
  while (q--) {
    cin >> type;
    if (type == 1) {
      cin >> a >> b >> k;
      add(1, 1, n, a + 1, b + 1, k);
    } else {
      cin >> a >> b;
      ans = node(0, inf, inf, 0, 0);
      query(1, 1, n, a + 1, b + 1);
      if (ans.evmn >= 0 && ans.odmn >= 0 && ans.r == 0)
        puts("1");
      else
        puts("0");
    }
  }
  return 0;
}
