import os
import sys

import numpy as np


def solve(inp):
    SEGTREE_TABLES = []
    COMMON_STACK = np.zeros(10 ** 7, dtype=np.int64)

    def bit_length(n):
        ret = 0
        while n:
            n >>= 1
            ret += 1
        return ret

    def segtree_init(n):
        n2 = 1 << bit_length(n)
        table = np.zeros((4, n2 << 1), dtype=np.int64)
        SEGTREE_TABLES.append(table)
        return len(SEGTREE_TABLES) - 1

    def segtree_build(ins, arr):
        table = SEGTREE_TABLES[ins]
        offset = table.shape[1] >> 1
        table[1] = 1
        table[0, offset:offset + len(arr)] = 1 - arr
        table[1, offset:offset + len(arr)] = arr
        for i in range(offset - 1, 0, -1):
            ch = i << 1
            table[0, i] = table[0, ch] + table[0, ch + 1]
            table[1, i] = table[1, ch] + table[1, ch + 1]
            table[2, i] = table[2, ch] + table[2, ch + 1] + table[1, ch] * table[0, ch + 1]

    def segtree_eval(table, offset, i):
        if table[3, i] == 0:
            return
        if i < offset:
            ch = i << 1
            table[3, ch] ^= 1
            table[3, ch + 1] ^= 1
        table[0, i], table[1, i] = table[1, i], table[0, i]
        table[2, i] = table[0, i] * table[1, i] - table[2, i]
        table[3, i] = 0

    def segtree_bottomup(table, i):
        lch = i << 1
        rch = lch + 1
        l0, l1, l2 = table[0, lch], table[1, lch], table[2, lch]
        r0, r1, r2 = table[0, rch], table[1, rch], table[2, rch]
        if table[3, lch]:
            l0, l1 = l1, l0
            l2 = l0 * l1 - l2
        if table[3, rch]:
            r0, r1 = r1, r0
            r2 = r0 * r1 - r2
        table[0, i] = l0 + r0
        table[1, i] = l1 + r1
        table[2, i] = l2 + r2 + l1 * r0

    def segtree_range_swap(ins, l, r):
        """ i for [l, r),  Ai ← ~Ai """
        table = SEGTREE_TABLES[ins]
        offset = table.shape[1] >> 1
        stack = COMMON_STACK
        stack[:3] = (1, 0, offset)
        si = 3
        updated = []
        while si:
            i, a, b = stack[si - 3:si]
            segtree_eval(table, offset, i)

            if b <= l or r <= a:
                si -= 3
                continue

            if l <= a and b <= r:
                table[3, i] ^= 1
                si -= 3
                continue

            updated.append(i)

            m = (a + b) // 2
            stack[si - 3:si] = (i << 1, a, m)
            stack[si:si + 3] = ((i << 1) + 1, m, b)
            si += 3

        while updated:
            i = updated.pop()
            segtree_bottomup(table, i)

    def segtree_query(ins, l, r):
        """ sum [l, r) """
        table = SEGTREE_TABLES[ins]
        offset = table.shape[1] >> 1
        stack = COMMON_STACK
        stack[:3] = (1, 0, offset)
        si = 3
        pick = []
        updated = []

        while si:
            i, a, b = stack[si - 3:si]

            segtree_eval(table, offset, i)

            if b <= l or r <= a:
                si -= 3
                continue

            if l <= a and b <= r:
                pick.append((a, i))
                si -= 3
                continue

            updated.append(i)

            m = (a + b) // 2
            stack[si - 3:si] = (i << 1, a, m)
            stack[si:si + 3] = ((i << 1) + 1, m, b)
            si += 3

        while updated:
            i = updated.pop()
            segtree_bottomup(table, i)

        pick.sort()
        cnt0, cnt1 = 0, 0
        res = 0
        for a, i in pick:
            r0, r1, r2 = table[0, i], table[1, i], table[2, i]
            res += r2 + cnt1 * r0
            cnt0 += r0
            cnt1 += r1
        return res

    def segtree_debug_print(ins):
        table = SEGTREE_TABLES[ins]
        offset = table.shape[1] >> 1
        for t in range(4):
            i = 1
            while i <= offset:
                print(table[t, i:2 * i])
                i <<= 1

    n = inp[0]
    aaa = inp[2:n + 2]

    ins = segtree_init(n)
    segtree_build(ins, aaa)

    qi = n + 2
    ans = []
    while qi < inp.size:
        t = inp[qi]
        if t == 1:
            segtree_range_swap(ins, inp[qi + 1] - 1, inp[qi + 2])
            qi += 3
        else:
            ans.append(segtree_query(ins, inp[qi + 1] - 1, inp[qi + 2]))
            qi += 3

    return ans


if sys.argv[-1] == 'ONLINE_JUDGE':
    from numba.pycc import CC

    cc = CC('my_module')
    cc.export('solve', '(i8[:],)')(solve)
    cc.compile()
    exit()

if os.name == 'posix':
    # noinspection PyUnresolvedReferences
    from my_module import solve
else:
    from numba import njit

    solve = njit('(i8[:],)', cache=True)(solve)
    print('compiled', file=sys.stderr)

inp = np.fromstring(sys.stdin.read(), dtype=np.int64, sep=' ')
ans = solve(inp)
print('\n'.join(map(str, ans)))


Measured memory_bytes: 131692