#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const double eps = 1e-9;
const double INF = inf;
const double EPS = eps;
int P[310000], R[310000];
int A[(1 << 20) + 100], n;
void add(int v, int d) {
  v += (1 << 19);
  while (v) A[v] += d, v >>= 1;
}
int sum(int l, int r) {
  l += (1 << 19), r += (1 << 19);
  int ret = 0;
  while (l < r) {
    if (l & 1) ret += A[l], l++;
    if (r & 1) r--, ret += A[r];
    l >>= 1, r >>= 1;
  }
  return ret;
}
void recalc(int v, int w) {
  if (v > 0 && P[v - 1] > P[v]) add(v - 1, w);
  if (v < n - 1 && P[v] > P[v + 1]) add(v, w);
}
int main() {
  int i, q, x, y, tp;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", &R[i]), R[i]--, P[R[i]] = i;
  for (i = 0; i < n - 1; i++)
    if (P[i] > P[i + 1]) add(i, 1);
  scanf("%d", &q);
  while (q > 0) {
    q--, scanf("%d%d%d", &tp, &x, &y), x--, y--;
    if (tp == 1) {
      printf("%d\n", sum(x, y) + 1);
      continue;
    }
    x = R[x], y = R[y];
    if (x > y) swap(x, y);
    recalc(x, -1);
    recalc(y, -1);
    if (x + 1 == y && P[x] > P[y]) add(x, 1);
    swap(P[x], P[y]), R[P[x]] = x, R[P[y]] = y;
    recalc(x, 1);
    recalc(y, 1);
    if (x > y) swap(x, y);
    if (x + 1 == y && P[x] > P[y]) add(x, -1);
  };
  return 0;
}
