#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 3e4 + 5;
const int MAX_A = 1e4;
const int B = 631; // sqrt(N * log2(MAX_A))
const int K = 48;
int n, q;
int a[N];
struct fenwick {
int n;
vector<int> ft;
fenwick() {}
fenwick(int n): n(n) {
ft.resize(n, 0);
}
void update(int pos, int val) {
for (; pos > 0; pos -= pos & (-pos)) ft[pos] += val;
}
int get(int pos) {
int ans = 0;
for (; pos < n; pos += pos & (-pos)) ans += ft[pos];
return ans;
}
};
int id[N], L[K], R[K];
fenwick BIT[K]; // chi phí bộ nhớ: O(K * MAX_A)
// BIT[id] là cây BIT quản lí các phần tử thuộc block id
void build() {
for (int i = 0; i < K; i++) {
L[i] = R[i] = -1;
BIT[i] = fenwick(MAX_A + 1);
}
for (int i = 1; i <= n; i++) {
id[i] = i / B;
if (L[id[i]] == -1) L[id[i]] = i;
R[id[i]] = i;
BIT[id[i]].update(a[i], 1);
}
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
build(); // O(n * log2(MAX_A))
cin >> q;
while (q--) {
int type; cin >> type;
if (type == 0) {
// O(log2(MAX_A))
int pos, val;
cin >> pos >> val;
BIT[id[pos]].update(a[pos], -1);
a[pos] = val;
BIT[id[pos]].update(a[pos], 1);
}
else {
int l, r, k;
cin >> l >> r >> k;
int ans = 0;
if (id[l] == id[r]) {
for (int i = l; i <= r; i++) ans += (a[i] > k); // O(B)
}
else {
for (int i = l; i <= R[id[l]]; i++) ans += (a[i] > k); // O(B)
for (int cid = id[l] + 1; cid <= id[r] - 1; cid++) ans += BIT[cid].get(k + 1); // O(N / B * log2(MAX_A))
for (int i = L[id[r]]; i <= r; i++) ans += (a[i] > k); // O(B)
}
cout << ans << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDNlNCArIDU7IApjb25zdCBpbnQgTUFYX0EgPSAxZTQ7IApjb25zdCBpbnQgQiA9IDYzMTsgLy8gc3FydChOICogbG9nMihNQVhfQSkpCmNvbnN0IGludCBLID0gNDg7IAoKaW50IG4sIHE7IAppbnQgYVtOXTsgCgpzdHJ1Y3QgZmVud2ljayB7CglpbnQgbjsgIAoJdmVjdG9yPGludD4gZnQ7IAoKCWZlbndpY2soKSB7fQoKCWZlbndpY2soaW50IG4pOiBuKG4pIHsKCQlmdC5yZXNpemUobiwgMCk7IAoJfQoKCXZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpIHsKCQlmb3IgKDsgcG9zID4gMDsgcG9zIC09IHBvcyAmICgtcG9zKSkgZnRbcG9zXSArPSB2YWw7IAoJfQoKCWludCBnZXQoaW50IHBvcykgewoJCWludCBhbnMgPSAwOyAgCgkJZm9yICg7IHBvcyA8IG47IHBvcyArPSBwb3MgJiAoLXBvcykpIGFucyArPSBmdFtwb3NdOyAKCQlyZXR1cm4gYW5zOyAKCX0KfTsgCgppbnQgaWRbTl0sIExbS10sIFJbS107IApmZW53aWNrIEJJVFtLXTsgLy8gY2hpIHBow60gYuG7mSBuaOG7mzogTyhLICogTUFYX0EpCgkJCQkvLyBCSVRbaWRdIGzDoCBjw6J5IEJJVCBxdeG6o24gbMOtIGPDoWMgcGjhuqduIHThu60gdGh14buZYyBibG9jayBpZAoKdm9pZCBidWlsZCgpIHsKCWZvciAoaW50IGkgPSAwOyBpIDwgSzsgaSsrKSB7CgkJTFtpXSA9IFJbaV0gPSAtMTsgIAoJCUJJVFtpXSA9IGZlbndpY2soTUFYX0EgKyAxKTsgCgl9CgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJaWRbaV0gPSBpIC8gQjsgIAoJCWlmIChMW2lkW2ldXSA9PSAtMSkgTFtpZFtpXV0gPSBpOyAgCgkJUltpZFtpXV0gPSBpOyAgCgkJQklUW2lkW2ldXS51cGRhdGUoYVtpXSwgMSk7IAoJfQp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG47Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCglidWlsZCgpOyAvLyBPKG4gKiBsb2cyKE1BWF9BKSkKCQoJY2luID4+IHE7ICAKCgl3aGlsZSAocS0tKSB7CgkJaW50IHR5cGU7IGNpbiA+PiB0eXBlOyAKCgkJaWYgKHR5cGUgPT0gMCkgewoJCQkvLyBPKGxvZzIoTUFYX0EpKQoJCQlpbnQgcG9zLCB2YWw7IAoJCQljaW4gPj4gcG9zID4+IHZhbDsgCgkJCUJJVFtpZFtwb3NdXS51cGRhdGUoYVtwb3NdLCAtMSk7IAoJCQlhW3Bvc10gPSB2YWw7IAoJCQlCSVRbaWRbcG9zXV0udXBkYXRlKGFbcG9zXSwgMSk7IAoJCX0KCQllbHNlIHsKCQkJaW50IGwsIHIsIGs7IAoJCQljaW4gPj4gbCA+PiByID4+IGs7IAoJCQkKCQkJaW50IGFucyA9IDA7ICAgCgkJCWlmIChpZFtsXSA9PSBpZFtyXSkgewoJCQkJZm9yIChpbnQgaSA9IGw7IGkgPD0gcjsgaSsrKSBhbnMgKz0gKGFbaV0gPiBrKTsgLy8gTyhCKQoJCQl9CgkJCWVsc2UgewoJCQkJZm9yIChpbnQgaSA9IGw7IGkgPD0gUltpZFtsXV07IGkrKykgYW5zICs9IChhW2ldID4gayk7IC8vIE8oQikKCQkJCWZvciAoaW50IGNpZCA9IGlkW2xdICsgMTsgY2lkIDw9IGlkW3JdIC0gMTsgY2lkKyspIGFucyArPSBCSVRbY2lkXS5nZXQoayArIDEpOyAvLyBPKE4gLyBCICogbG9nMihNQVhfQSkpCgkJCQlmb3IgKGludCBpID0gTFtpZFtyXV07IGkgPD0gcjsgaSsrKSBhbnMgKz0gKGFbaV0gPiBrKTsgLy8gTyhCKQoJCQl9CgoJCQljb3V0IDw8IGFucyA8PCAnXG4nOyAKCQl9Cgl9Cn0=