#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 2e5 + 10;
int a[N], L[N], R[N], b[N];
int tag[N], bel[N], sum[N];
vector <int> vec;
inline int query(int x) {
return lower_bound(vec.begin(), vec.end(), x) - vec.begin();
}
inline void update(int l, int r) {
int p = bel[l]; a[l] = r;
for (int i = L[p]; i <= R[p]; ++i)
b[i] = a[i];
stable_sort(b + L[p], b + R[p] + 1);
}
inline int solve(int l, int r, int k) {
int ans = 0, p = bel[l], q = bel[r];
if(p == q) {
for (int i = l; i <= r; ++i)
if(a[i] == k)
ans++;
return ans;
}
for (int i = l; i <= min(r, R[p]); ++i)
if(a[i] == k)
ans++;
for (int i = L[q]; i <= r; ++i)
if(a[i] == k)
ans++;
for (int i = p + 1; i < q; ++i) {
int lv = lower_bound(b + L[i], b + R[i] + 1, k) - b;
int rv = lower_bound(b + L[i], b + R[i] + 1, k + 1) - b - 1;
ans += rv - lv + 1;
}
return ans;
}
inline int read() {
int f = 1, s = 0;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
s = s * 10 + c - '0';
c = getchar();
}
return f * s;
}
int main() {
int n = read(), m = read();
int siz = sqrt(n), blo = (n - 1) / siz + 1;
for (int i = 1; i <= blo; ++i) {
L[i] = (i - 1) * siz + 1;
R[i] = min(n, i * siz);
}
for (int i = 1; i <= n; ++i) {
a[i] = read(); b[i] = a[i];
vec.push_back(a[i]);
bel[i] = (i - 1) / siz + 1;
sum[bel[i]] += a[i];
}
for (int i = 1; i <= m; ++i) {
char x; scanf("%c ", &x);
if(x == 'Q') {
int l, r, k;
l = read(), r = read(), k = read();
printf("%d\n", solve(l, r, k));
} else {
int l, r; l = read(), r = read();
update(l, r);
}
}
return 0;
}
样例过了,求大佬改正,悬关