#include <stdio.h>
#include <algorithm>
#include <string>
using namespace std;

#define INF 2123456789

const int MaxN = 100005;

int a[MaxN], s[MaxN];
int n, q;

int upperBound(int left, int right, int x){
    while (left < right){
        int mid = (left + right) / 2;

        if (s[mid] <= x)
            left = mid + 1;
        else
            right = mid;
    }

    return s[left] > x ? left : left + 1;
}

int lowerBound(int left, int right, int x){
    while (left < right){
        int mid = (left + right) / 2;

        if (s[mid] < x)
            left = mid + 1;
        else
            right = mid;
    }

    return s[left] >= x ? left : left + 1;
}

int main(){
    FILE *fin = fopen("pijaca.in", "r");
    FILE *fout = fopen("pijaca.out", "w");

    fscanf(fin, "%d", &n);
    for (int i = 1; i <= n; i++){
        fscanf(fin, "%d", a+i);
        s[i] = a[i];
    }

    int k = 1;
    for (; k*k < n; k++);

    for (int i = n+1; i <= k*k; i++) a[i] = s[i] = INF;
    n = k*k;

    for (int i = 1; i <= k; i++) sort(s + (i - 1) * k + 1, s + i * k + 1);

    fscanf(fin, "%d", &q);
    while (q--){
        int command; fscanf(fin, "%d", &command);

        if (command == 1){
            int left, right, low, high; fscanf(fin, "%d%d%d%d", &left, &right, &low, &high);

            int sol = 0;
            while (left <= right && right % k){
                sol += low <= a[right] && a[right] <= high;
                right--;
            }

            while (left <= right && left % k != 1){
                sol += low <= a[left] && a[left] <= high;
                left++;
            }

            while (left <= right){
                int upper = upperBound(right - k + 1, right, high);
                int lower = lowerBound(right - k + 1, right, low);
                //int upper = (int)(upper_bound(s + right - k + 1, s + right + 1, high) - s);
                //int lower = (int)(lower_bound(s + right - k + 1, s + right + 1, low) - s);

                sol += upper - lower;
                right -= k;
            }

            fprintf(fout, "%d\n", sol);
        }
        else {
            int idx, num; fscanf(fin, "%d%d", &idx, &num);
            int left = idx - (idx - 1) % k, right = left + k - 1;

            int tmp = a[idx];

            a[idx] = num;
            idx = lowerBound(left, right, tmp);
            //idx = (int)(lower_bound(s + left, s + right + 1, tmp) - s);
            s[idx] = num;

            while (left < idx && s[idx-1] > s[idx]){
                int p = s[idx-1]; s[idx-1] = s[idx]; s[idx] = p;
                idx--;
            }

            while (idx < right && s[idx] > s[idx+1]){
                int p = s[idx]; s[idx] = s[idx+1]; s[idx+1] = p;
                idx++;
            }
        }
    }

    fclose(fin); fclose(fout);
    return 0;
}
