#include <bits/stdc++.h>
using namespace std;
const int N = 400000;
int ar[N], pos[N], val[N];
inline int lowbit(int x) { return x & (-x); }
int sum(int i) {
  int s = 0;
  for (; i > 0; s += ar[i], i -= lowbit(i))
    ;
  return s;
}
void add(int i, int v) {
  for (; i < N; ar[i] += v, i += lowbit(i))
    ;
}
int main() {
  int n, m;
  while (scanf("%d", &n) != EOF) {
    memset(ar, 0, sizeof(ar));
    for (int i = 1; i <= n; i++) {
      scanf("%d", &val[i]);
      pos[val[i]] = i;
    }
    for (int i = 1; i < n; i++) {
      if (pos[i] > pos[i + 1]) {
        add(i, 1);
      }
    }
    scanf("%d", &m);
    while (m--) {
      int op, a, b, va, vb;
      scanf("%d%d%d", &op, &a, &b);
      if (op == 1) {
        printf("%d\n", sum(b - 1) - sum(a - 1) + 1);
      } else {
        va = val[a];
        vb = val[b];
        if (va != n && pos[va + 1] < b && pos[va + 1] > a) {
          add(va, 1);
        }
        if (va != 1 && pos[va - 1] < b && pos[va - 1] > a) {
          add(va - 1, -1);
        }
        if (vb != n && pos[vb + 1] < b && pos[vb + 1] > a) {
          add(vb, -1);
        }
        if (vb != 1 && pos[vb - 1] < b && pos[vb - 1] > a) {
          add(vb - 1, 1);
        }
        if (va + 1 == vb) {
          add(va, 1);
        }
        if (vb + 1 == va) {
          add(vb, -1);
        }
        swap(val[a], val[b]);
        swap(pos[va], pos[vb]);
      }
    }
  }
  return 0;
}
