#include <bits/stdc++.h> // NeOWami
using namespace std;
/*
Time complexity:
BS = ?
cntB = n / BS
GET: O = cntB * log2(1e4) + BS;
UPDATE: log(1e4) + 1;
minimize GET:
(a + b >= 2√(ab))
-> O >= 2√(cntB * log2(1e4) * BS)
-> cntB * log2(1e4) = BS
-> n/BS * log2(1e4) = BS
-> n * log2(1e4) = BS ^ 2;
Vì vậy BS = √(n * log2(1e4))
*/
#define ft first
#define sc second
const int N = 1e5 + 5;
const int LIM = 1e4 + 5;
const int BS = 1153;
int n, a[N], q;
int bit[N / BS + 1][LIM];
int blockId[N];
void updateBit(int i, int id, int t) {
for (; id > 0; id -= id &- id) bit[i][id] += t;
}
void process() {
for (int i = 1; i <= n; i++) blockId[i] = (i - 1) / BS;
for (int i = 1; i <= n; i++) updateBit(blockId[i], a[i], 1);
}
int getBit(int i, int id) {
int ans = 0;
for (; id < LIM; id += id &- id) ans += bit[i][id];
return ans;
}
int getQuery(int l, int r, int k) {
int L = blockId[l], R = blockId[r];
int ans = 0;
if (L >= R) {
for (int i = l; i <= r; i++) ans += (a[i] > k);
return ans;
}
for (int i = L + 1; i < R; i++) ans += getBit(i, k + 1);
for (int i = l; i <= (L + 1) * BS; i++) ans += (a[i] > k);
for (int i = R * BS + 1; i <= r; i++) ans += (a[i] > k);
return ans;
}
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("KQUERY.inp")) {
freopen("KQUERY.inp", "r", stdin);
freopen("KQUERY.out", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
process();
cin >> q;
while(q--) {
char type; cin >> type;
if (type == 'Q') {
int l, r, k; cin >> l >> r >> k;
cout << getQuery(l, r, k) << "\n";
}
else {
int i, x; cin >> i >> x;
updateBit(blockId[i], a[i], -1);
a[i] = x;
updateBit(blockId[i], a[i], 1);
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLyoKVGltZSBjb21wbGV4aXR5OgpCUyA9ID8KY250QiA9IG4gLyBCUwoKR0VUOiBPID0gY250QiAqIGxvZzIoMWU0KSArIEJTOwpVUERBVEU6IGxvZygxZTQpICsgMTsKbWluaW1pemUgR0VUOgooYSArIGIgPj0gMuKImihhYikpCi0+ICBPID49IDLiiJooY250QiAqIGxvZzIoMWU0KSAqIEJTKQotPiBjbnRCICogbG9nMigxZTQpID0gQlMKLT4gbi9CUyAqIGxvZzIoMWU0KSA9IEJTCi0+IG4gKiBsb2cyKDFlNCkgPSBCUyBeIDI7CgpWw6wgduG6rXkgQlMgPSDiiJoobiAqIGxvZzIoMWU0KSkKKi8KI2RlZmluZSBmdCBmaXJzdAojZGVmaW5lIHNjIHNlY29uZApjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGludCBMSU0gPSAxZTQgKyA1Owpjb25zdCBpbnQgQlMgPSAxMTUzOwppbnQgbiwgYVtOXSwgcTsKaW50IGJpdFtOIC8gQlMgKyAxXVtMSU1dOwppbnQgYmxvY2tJZFtOXTsKdm9pZCB1cGRhdGVCaXQoaW50IGksIGludCBpZCwgaW50IHQpIHsKICAgIGZvciAoOyBpZCA+IDA7IGlkIC09IGlkICYtIGlkKSBiaXRbaV1baWRdICs9IHQ7Cn0Kdm9pZCBwcm9jZXNzKCkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBibG9ja0lkW2ldID0gKGkgLSAxKSAvIEJTOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB1cGRhdGVCaXQoYmxvY2tJZFtpXSwgYVtpXSwgMSk7Cn0KaW50IGdldEJpdChpbnQgaSwgaW50IGlkKSB7CiAgICBpbnQgYW5zID0gMDsKICAgIGZvciAoOyBpZCA8IExJTTsgaWQgKz0gaWQgJi0gaWQpIGFucyArPSBiaXRbaV1baWRdOwogICAgcmV0dXJuIGFuczsKfQppbnQgZ2V0UXVlcnkoaW50IGwsIGludCByLCBpbnQgaykgewogICAgaW50IEwgPSBibG9ja0lkW2xdLCBSID0gYmxvY2tJZFtyXTsKICAgIGludCBhbnMgPSAwOwogICAgaWYgKEwgPj0gUikgewogICAgICAgIGZvciAoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykgYW5zICs9IChhW2ldID4gayk7CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH0KICAgIGZvciAoaW50IGkgPSBMICsgMTsgaSA8IFI7IGkrKykgYW5zICs9IGdldEJpdChpLCBrICsgMSk7CiAgICBmb3IgKGludCBpID0gbDsgaSA8PSAoTCArIDEpICogQlM7IGkrKykgYW5zICs9IChhW2ldID4gayk7CiAgICBmb3IgKGludCBpID0gUiAqIEJTICsgMTsgaSA8PSByOyBpKyspIGFucyArPSAoYVtpXSA+IGspOwogICAgcmV0dXJuIGFuczsKfQpzaWduZWQgbWFpbigpIHsKICAgIGNpbi50aWUoTlVMTCktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBpZihpZnN0cmVhbSgiS1FVRVJZLmlucCIpKSB7CiAgICAgICAgZnJlb3BlbigiS1FVRVJZLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIktRVUVSWS5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07CiAgICBwcm9jZXNzKCk7CiAgICBjaW4gPj4gcTsKICAgIHdoaWxlKHEtLSkgewogICAgICAgIGNoYXIgdHlwZTsgY2luID4+IHR5cGU7CiAgICAgICAgaWYgKHR5cGUgPT0gJ1EnKSB7CiAgICAgICAgICAgIGludCBsLCByLCBrOyBjaW4gPj4gbCA+PiByID4+IGs7CiAgICAgICAgICAgIGNvdXQgPDwgZ2V0UXVlcnkobCwgciwgaykgPDwgIlxuIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBpLCB4OyBjaW4gPj4gaSA+PiB4OwogICAgICAgICAgICB1cGRhdGVCaXQoYmxvY2tJZFtpXSwgYVtpXSwgLTEpOwogICAgICAgICAgICBhW2ldID0geDsKICAgICAgICAgICAgdXBkYXRlQml0KGJsb2NrSWRbaV0sIGFbaV0sIDEpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9