#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, z, a[300005], b[300005], c[300005];
void add(int x, int v) {
  for (int j = x; j <= n; j += j & -j) a[j] += v;
}
int query(int x, int y) {
  int sum = 0;
  for (int j = y; j; j -= j & -j) sum += a[j];
  for (int j = x - 1; j; j -= j & -j) sum -= a[j];
  return sum;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", c + i), b[c[i]] = i;
  for (int i = 1; i <= n - 1; ++i)
    if (b[i + 1] < b[i]) add(i, 1);
  scanf("%d", &m);
  while (m--) {
    scanf("%d%d%d", &x, &y, &z);
    if (x == 1)
      printf("%d\n", query(y, z - 1) + 1);
    else {
      int ty = y, tz = z;
      y = c[y], z = c[z];
      swap(c[ty], c[tz]);
      if (y > z) swap(y, z);
      if (y != 1 && b[y] < b[y - 1]) add(y - 1, -1);
      if (b[y + 1] < b[y]) add(y, -1);
      if (z - 1 != y && b[z] < b[z - 1]) add(z - 1, -1);
      if (z != n && b[z + 1] < b[z]) add(z, -1);
      swap(b[y], b[z]);
      if (y != 1 && b[y] < b[y - 1]) add(y - 1, 1);
      if (b[y + 1] < b[y]) add(y, 1);
      if (z - 1 != y && b[z] < b[z - 1]) add(z - 1, 1);
      if (z != n && b[z + 1] < b[z]) add(z, 1);
    }
  }
}
