func_code_string: #include <bits/stdc++.h>   using namespace std;   int mark[201000 << 2];   int A[201000], n, m;   struct ST {     int val[2], las, len;     void update(ST a, ST b) {       b.val[1] -= a.las;       b.val[0] += a.las;       if (b.len & 1)         b.las -= a.las;       else         b.las += a.las;       val[0] = min(a.val[0], b.val[a.len & 1]);       val[1] = min(a.val[1], b.val[(a.len & 1) ^ 1]);       las = b.las;       len = a.len + b.len;       return;     }   } node[201000 << 2];   void build(int u, int L, int R) {     if (L == R) {       node[u].val[0] = 0;       node[u].val[1] = node[u].las = A[L];       node[u].len = 1;       return;     }     build((u << 1), L, ((L + R) >> 1));     build(((u << 1) | 1), (((L + R) >> 1) + 1), R);     node[u].update(node[(u << 1)], node[((u << 1) | 1)]);   }   void down(int u, int L, int R) {     if (!mark[u]) return;     node[u].val[1] += mark[u];     if (node[u].len & 1) node[u].las += mark[u];     if (L < R) mark[(u << 1)] += mark[u], mark[((u << 1) | 1)] += mark[u];     mark[u] = 0;     return;   }   void change(int u, int L, int R, int l, int r, int k) {     down(u, L, R);     if (L == l && R == r) {       mark[u] += k;       down(u, L, R);       return;     }     if (r < (((L + R) >> 1) + 1))       down(((u << 1) | 1), (((L + R) >> 1) + 1), R),           change((u << 1), L, ((L + R) >> 1), l, r, k);     else if (l > ((L + R) >> 1))       down((u << 1), L, ((L + R) >> 1)),           change(((u << 1) | 1), (((L + R) >> 1) + 1), R, l, r, k);     else {       change((u << 1), L, ((L + R) >> 1), l, ((L + R) >> 1), k);       change(((u << 1) | 1), (((L + R) >> 1) + 1), R, (((L + R) >> 1) + 1), r, k);     }     node[u].update(node[(u << 1)], node[((u << 1) | 1)]);   }   ST query(int u, int L, int R, int l, int r) {     down(u, L, R);     if (L == l && R == r) return node[u];     if (r < (((L + R) >> 1) + 1))       return query((u << 1), L, ((L + R) >> 1), l, r);     else if (l > ((L + R) >> 1))       return query(((u << 1) | 1), (((L + R) >> 1) + 1), R, l, r);     else {       ST a = query((u << 1), L, ((L + R) >> 1), l, ((L + R) >> 1));       ST b =           query(((u << 1) | 1), (((L + R) >> 1) + 1), R, (((L + R) >> 1) + 1), r);       a.update(a, b);       return a;     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &A[i]);     build(1, 1, n);     for (scanf( %d , &m); m; m--) {       int t, L, R, k;       scanf( %d %d %d , &t, &L, &R);       L++, R++;       if (t == 1) {         scanf( %d , &k);         change(1, 1, n, L, R, k);       } else {         ST ans = query(1, 1, n, L, R);         if (ans.val[0] >= 0 && ans.val[1] >= 1 && ans.las - (ans.len & 1) == 0)           printf( 1 n );         else           printf( 0 n );       }     }     return 0;   }   