#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-7;
const double pi = acos(-1.0);
int sum[1000100], a[300100], pos[300100];
bool vis[300100];
void add(int pos, int k) {
  while (pos <= 1000000) {
    sum[pos] += k;
    pos += pos & -pos;
  }
}
int query(int pos) {
  if (pos == 0) return 0;
  int ans = 0;
  while (pos > 0) {
    ans += sum[pos];
    pos -= pos & -pos;
  }
  return ans;
}
int main() {
  int n, i, x, y, q, fuck, k, t, temp;
  scanf("%d", &n);
  memset(vis, 0, sizeof(vis));
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    pos[a[i]] = i;
  }
  memset(sum, 0, sizeof(sum));
  for (i = 1; i < n; i++) {
    if (pos[i] > pos[i + 1]) {
      vis[i] = 1;
      add(i, 1);
    }
  }
  scanf("%d", &q);
  while (q--) {
    scanf("%d", &fuck);
    if (fuck == 1) {
      scanf("%d%d", &x, &y);
      printf("%d\n", query(y - 1) - query(x - 1) + 1);
    } else {
      scanf("%d%d", &x, &y);
      k = a[x];
      if (k < n) {
        t = pos[k + 1];
        if (x <= t && y >= t && vis[k] == 0) {
          vis[k] = 1;
          add(k, 1);
        }
      }
      if (k > 1) {
        t = pos[k - 1];
        if (x <= t && y >= t && vis[k - 1] == 1) {
          vis[k - 1] = 0;
          add(k - 1, -1);
        }
      }
      k = a[y];
      if (k > 1) {
        t = pos[k - 1];
        if (x <= t && y >= t && vis[k - 1] == 0) {
          vis[k - 1] = 1;
          add(k - 1, 1);
        }
      }
      if (k < n) {
        t = pos[k + 1];
        if (x <= t && y >= t && vis[k] == 1) {
          vis[k] = 0;
          add(k, -1);
        }
      }
      temp = a[x];
      a[x] = a[y];
      a[y] = temp;
      pos[a[x]] = x;
      pos[a[y]] = y;
    }
  }
  return 0;
}
