#include <bits/stdc++.h>
using namespace std;
const long long N = 300100;
long long n, q;
vector<long long> p;
vector<long long> where;
long long f[N];
void add(long long i, long long change) {
  for (; i < N; i += i & -i) {
    f[i] += change;
  }
}
long long get(long long i) {
  long long res = 0;
  for (; i > 0; i -= i & -i) {
    res += f[i];
  }
  return res;
}
void update(long long i, long long value) {
  long long change = value - (get(i) - get(i - 1));
  add(i, change);
}
void update_ending(long long e) {
  if (e + 1 <= n) update(e, where[e + 1] < where[e]);
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  p.resize(n + 1);
  where.resize(n + 1);
  for (long long i = 1; i <= n; i++) {
    cin >> p[i];
    where[p[i]] = i;
  }
  for (long long i = 1; i < n; i++) {
    update_ending(i);
  }
  long long q;
  cin >> q;
  while (q--) {
    long long e, x, y;
    cin >> e >> x >> y;
    if (e == 1) {
      cout << get(y - 1) - get(x - 1) + 1 << '\n';
    } else {
      long long nx = p[x], ny = p[y];
      swap(p[x], p[y]);
      swap(where[nx], where[ny]);
      if (nx > 1) update_ending(nx - 1);
      if (nx <= n) update_ending(nx);
      if (ny > 1) update_ending(ny - 1);
      if (ny <= n) update_ending(ny);
    }
  }
  return 0;
}
