#include <bits/stdc++.h>
using namespace std;
const int N = 320000;
int tr[N], n, m, a[N], at[N];
int vis[N];
int idx = 0;
void add(int x, int y) {
  for (; x <= n; x += x & (-x)) tr[x] += y;
}
int get(int x) {
  int s = 0;
  for (; x; x -= x & (-x)) s += tr[x];
  return s;
}
void Set(int x, int y) {
  int tmp = get(x) - get(x - 1);
  add(x, y - tmp);
}
int main() {
  int i, x, y, j, z;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]), at[a[i]] = i;
  }
  add(1, 1);
  for (i = 2; i <= n; i++) {
    if (at[i] < at[i - 1]) add(i, 1);
  }
  scanf("%d", &m);
  while (m--) {
    scanf("%d", &z);
    scanf("%d%d", &x, &y);
    if (z == 1) {
      printf("%d\n", get(y) - get(x) + 1);
    } else {
      swap(a[x], a[y]);
      swap(at[a[x]], at[a[y]]);
      if (a[x] > 1 && at[a[x]] < at[a[x] - 1])
        Set(a[x], 1);
      else
        Set(a[x], 0);
      if (a[x] < n && at[a[x]] > at[a[x] + 1])
        Set(a[x] + 1, 1);
      else
        Set(a[x] + 1, 0);
      if (a[y] > 1 && at[a[y]] < at[a[y] - 1])
        Set(a[y], 1);
      else
        Set(a[y], 0);
      if (a[y] < n && at[a[y]] > at[a[y] + 1])
        Set(a[y] + 1, 1);
      else
        Set(a[y] + 1, 0);
    }
  }
}
