1 #include<iostream>
2 #include<cstdio>
3 #include<cstdlib>
4 #include<cstring>
5 #include<cmath>
6 #include<algorithm>
7 #include<queue>
8 #include<vector>
9 using namespace std;
10 typedef long long LL;
11 const int maxn=1000001;
12 int N,Q,M,block;
13 int a[maxn],b[maxn],pos[maxn],add[maxn];
14 char s[10];
15 inline void reset(int x){
16 int l=(x-1)*block+1,r=min(N,x*block);
17 for(int i=l;i<=r;i++) b[i]=a[i];
18 sort(b+l,b+r+1);
19 }
20 inline void update(int l,int r,int delta){
21 if(pos[l]==pos[r]){
22 for(int i=l;i<=r;i++) a[i]+=delta;
23 }
24 else{
25 for(int i=l;i<=pos[l]*block;i++) a[i]+=delta;
26 for(int i=(pos[r]-1)*block+1;i<=r;i++) a[i]+=delta;
27 }
28 reset(pos[l]); reset(pos[r]);
29 for(int i=pos[l]+1;i<=pos[r]-1;i++) add[i]+=delta;
30 }
31 inline int find(int l,int r,int v){
32 if(l+1>=r){
33 if(b[l]>=v) return l;
34 else return r;
35 }
36 int mid=(l+r)>>1;
37 if(b[mid]>=v) return find(l,mid,v);
38 else return find(mid+1,r,v);
39 }
40 inline int query(int l,int r,int z){
41 int sum=0;
42 if(pos[l]==pos[r]){
43 for(int i=l;i<=r;i++)
44 if(a[i]+add[pos[i]]>=z) sum++;
45 }
46 else{
47 for(int i=l;i<=pos[l]*block;i++)
48 if(a[i]+add[pos[i]]>=z) sum++;
49 for(int i=(pos[r]-1)*block+1;i<=r;i++)
50 if(a[i]+add[pos[i]]>=z) sum++;
51 }
52 for(int i=pos[l]+1;i<=pos[r]-1;i++){
53 sum+=(i*block+1)-find((i-1)*block+1,i*block+1,z-add[i]);
54 }
55 return sum;
56 }
57 int main(){
58 scanf("%d%d",&N,&Q);
59 block=int(sqrt(N));
60 for(int i=1;i<=N;i++){
61 scanf("%d",&a[i]); b[i]=a[i];
62 pos[i]=(i-1)/block+1;
63 }
64 if(N%block!=0) M=N/block+1;
65 else M=N/block;
66 for(int i=1;i<=M;i++) reset(i);
67 while(Q--){
68 int x,y,z;
69 scanf("%s%d%d%d",s,&x,&y,&z);
70 if(s[0]==‘M‘) update(x,y,z);
71 else printf("%d\n",query(x,y,z));
72 }
73 return 0;
74 }