#define int long long
constexpr int N = 5e5 + 5, inf = LLONG_MAX;
namespace Jelly {
int n, q, w, L[N], R[N], a[N], b[N], it[N];
int work(int l, int r, int k) {
int x = it[l], y = it[r], ans = 0;
if(x == y) {
REP(i, l, r) if(a[i] <= k) ans ++;
return ans;
}
REP(i, l, R[x]) if(a[i] <= k) ans ++;
REP(i, L[y], r) if(a[i] <= k) ans ++;
REP(i, x + 1, y - 1) ans += (int)(lower_bound(b + L[i], b + R[i] + 1, k) - b) - L[i];
return ans;
}
void solve() {
char opt;
Read(opt);
if(opt == 'M') {
int x, y;
Read(x, y);
a[x] = y;
REP(i, L[it[x]], R[it[x]]) b[i] = a[i];
sort(b + L[it[x]], b + R[it[x]] + 1);
}
else {
int l, r, x;
Read(l, r, x);
Writeln(work(l, r, x));
}
}
int main() {
Read(n, q);
w = ceil(sqrt(n));
REP(i, 1, n) Read(a[i]), b[i] = a[i];
REP(i, 1, w) L[i] = (i - 1) * w + 1, R[i] = min(n, i * w);
REP(i, 1, w) REP(j, L[i], R[i]) it[j] = i, sort(b + L[i], b + R[i] + 1);
while(q --) solve();
return 0;
}
}
signed main() {
int T = 1;
// Read(T);
while (T --) Jelly::main();
return 0;
}
如上示代码,过了样例。